前言
使用分类需要注意四个细节:
一、分类只能增加方法,不能增加属性
例如,有下面一个分类,这么写是错误的:
@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
