现在好多刚入门的开发者对于这个@property和@synthesize这两个关键字弄不清楚,看公司里面的代码,好多老程序员留下的代码里面都有这个关键字,这个是衡量一个程序员是不是老程序员的关键,但不是衡量一个优秀的程序员的关键,为了咱们成为更优秀的程序员,为了更好的阅读代码,现在咱们就彻底弄清楚这写关键字是啥意思。
@interface Person : NSObject
{
@public //这个代表这个成员变量是公共的,可以在外界访问,比如在main.m中访问用对象p->_age访问
@protected//这个是默认的,受保护的,成员变量只能在自己内部或者在子类内部访问
@private//这个是私有的,成员变量只能在自己的内部访问
@package//只能在本框架内使用,不常用,不多做介绍
NSInteger _age;
}
@property NSInteger age;
-(void)test;
@end
比如一个Person.h里面@property NSInteger age;这一句就是代表在声明了setter和getter方法
在早期的Xcode里面不会自动帮你写setter和getter方法,所以在Person.m里面@synthesize age = _age;这一句就是代表了实现了_age这个成员变量的setter和getter方法,这样在person类里面会自动创建_age这个成员变量,但是这个成员变量是私有的,只能在自己类的内部访问,其子类在内部也不能访问,或则通过setter和getter方法访问,如果想让其在子类内部访问,就在person.h里面声明一下成员变量,就像这样
@interface Person : NSObject
{
NSInteger _age;
}
@property NSInteger age;
-(void)test;
@end
这样就能在子类内部访问这个成员变量了,
如果想让其在外部不通过setter和getter方法访问了,直接用对象访问,那就加上关键字
@interface Person : NSObject
{
@public
NSInteger _age;
}
@property NSInteger age;
-(void)test;
@end
@interface Person : NSObject
{
NSInteger _age;
}
这样就能在其子类里面访问_age了。