在ios开发中,分类的概念我们都很熟悉,通常我们会利用分类来给一个类添加一些额外的方法,添加方法的操作和平时在类中添加方法的操作一致,这里就不再赘述。下面我们来说说怎样在分类中添加属性:
添加属性可以再分类的.h文件中来添加,也可以再.m文件中的匿名分类中添加,我们像添加普通属性一样添加分类属性,这是编译器不会报任何的异常,但是当使用到这些分类属性的时候会导致程序崩溃,为了解决这个问题,我们需要用到runtime运行时。
举个栗子:
添加的分类属性如下:
@property (nonatomic, copy) NSString *title;
添加运行时头文件
#import <objc/runtime.h>
然后重写属性的set和get方法
// 定义属性的Key
static NSString *titleKey = @"titleKey";
- (void)setTitle:(NSString *)title
{
objc_setAssociatedObject(self, &titleKey, title, OBJC_ASSOCIATION_COPY);
}
- (NSString *)title
{
return objc_getAssociatedObject(self, &titleKey);
}
objc_setAssociatedObject方法中,有四个参数,分别是:源对象,关联时的用来标记是哪一个属性的key(因为你可能要添加很多属性),关联的对象和一个关联策略。
重写完set和get方法后,就可以正常使用了。