iOS 给分类添加属性

我们都知道可以通过分类添加方法,但是是否可以添加变量有一部分人就不知道了;其实分类里面是不可以添加成员变量的,但是却可以添加属性。

这时候有人会提出,我添加属性后调用会被crash
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSObject setName:]: unrecognized selector sent to instance 0x7fced1f31330

这是因为在分类中添加的属性不会自动生成set、get方法,这是就需要自己在分类的实现文件里面实现属性的set、get方法,如果你跟平时一样去写set、get方法你会发现代码会直接报错
Use of undeclared identifier '_name'

这时就需要用到runtime了,使用runtime实现属性的set、get方法,
具体实现代码如下:

.h文件

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSObject (Person)

@property (nonatomic, copy) NSString *name;

@end

NS_ASSUME_NONNULL_END

.m文件

#import "NSObject+Person.h"
#import <objc/runtime.h> /*或者 #import <objc/message.h>*/
static NSString *nameKey = @"nameKey"; //那么的key

@interface NSObject ()

@end

@implementation NSObject (Person)

/**
 setter方法
 */
- (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
}

/**
 getter方法
 */
- (NSString *)name {
    return objc_getAssociatedObject(self, &nameKey);
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容