前言
使用分类需要注意四个细节:
一、分类只能增加方法,不能增加属性例如,有下面一个分类,这么写是错误的: @interface Person (test) { int _age; } – (void)haha; @end 这句话会报错:int _age; 意思是,分类不能写属性!
二、在分类之中可以写@property ,但是不会自动生成私有属性,也不会自动生成getter、setter的实现,只会生成getter、setter的声明。例如,如下这种写法: @interface Person (test) @property(nonatomic,assign)int age; – (void)haha; @end 不会生成_age私有属性,也不会生成- (void)setAge方法,和- (int)age方法。 如果编译以下的语句,会报发送给实例的消息无法识别,哪个消息呢,[Student setAge:]消息: int main() { Student *s1 = [Student new]; [s1 setAge:19];//这句话会报错 return 0; } 怎么办呢,如果你就是想在分类中使用@property声明属性呢,自己在分类的实现文件里写setter、getter