欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-10-26 11:16:08
ios开发-在分类(category)文件中添加属性,在分类中添加属性时要注意,在分类头文件中添加的属性不会自动生成setter和getter,需自己以runtime方法实现,并且不能以下划线+属性...

ios开发-在分类(category)文件中添加属性,在分类中添加属性时要注意,在分类头文件中添加的属性不会自动生成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);
}

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

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

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