Objective-C中为什么不能直接添加分类?
在Objective-C中,当我们给一个类添加一个分类时,如果在分类中定义了属性,后来代码中直接调用该属性,程序会报错,报错的原因是因为平常当我们使用@property声明一个属性时,系统会自动给我们生成带下划线的成员变量及对应的setter和getter方法,但是当我们在分类中声明属性时,系统并不会像平常一样为我们生成成员变量及setter和getter方法,它只会为我们在属性列表里添加相应的属性,所以当我们在代码中直接调用分类中的属性时,程序会报错,提示找不到相应的方法。
解决办法
要想在分类中添加属性,我们可以采用通过运行时建立关联引用,如下代码,通过这个方式就能顺利在分类中添加属性啦。
最后对于objc_setAssociatedObject方法的参数做一个说明,该方法一共有4个参数,分别是源对象,关联时的用来标记是哪一个属性的key(因为你可能要添加很多属性),关联的对象和一个关联策略,用来标记是哪一个属性的key有三种常见的写法,效果都一样,如下:
关联策略是一个枚举值,和属性的特性类似。