您的位置:首页 > 移动开发 > IOS开发

iOS开发-在分类(Category)文件中添加属性

2017-06-15 17:19 274 查看
在分类中添加属性时要注意,在分类头文件中添加的属性不会自动生成setter和getter,需自己以runtime方法实现,并且不能以下划线+属性名的方式访问。
例如我们在分类头文件中写这么一个属性:
@property (nonatomic, strong) ClassName *propertyName;


这个属性这时并不存在 getter 和 setter方法,需要在.m文件中自己实现

static const void *ClassNameKey = &ClassNameKey;
//然后自己实现getset方法
- (ClassName *)propertyName {
return objc_getAssociatedObject(self, ClassNameKey);
}

- (void)setPropertyName:(ClassName *)propertyName {
objc_setAssociatedObject(self, ClassNameKey, propertyName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}


另外要注意,在分类文件中无法添加全局变量,如果硬添加会编译报错,如图:



因此,如果有人问:如果在分类中添加一个与原类中属性名称相同的全局变量并在方法中赋值,原类属性的值是否发生变化,这时分两种情况,要么他是在考察你是否知道分类中无法添加全局变量,要么他是个逗逼。

That's all.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息