昨天一个同事问我,为什么不能为Category添加Properties,说实话,当时还真帮我这个新手问住了,以前只知道不能,但是真的不知道为什么不能,这就是不求甚解惹的祸吧。下次是看了一些材料之后的理解:
我们可以通过Category为一个已存在的类添加方法,但是Objective-C并不允许利用Category为类添加Properties。我们可以利用@property声明一个Property,但是并不允许为Category添加成员变量,系统不允许也不会为我们主动进行@synthesize,这是因为@synthesize property不仅仅添加了get/set方法,还会在类中添加一个字段,这样就会改变原有类的大小。如果在Category中用到了@property,我们必须手动完成该property的get/set方法。如果要为原有的类添加Properties,最好的方法是利用继承。当然,Objective-C提供了 objc_setAssociatedObject() 方法,我们可以利用该方法模仿为Category添加对应的Properties。