1.@property增强
- 自从Xcode 4.x后,@property可以同时生成setter和getter的声明和实现
@interface Person : NSObject { int _age; } @property int age; @end
2.@property增强注意点
- 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量。
@interface Person : NSObject { @public int _age; int age; } @property int age; @end int main(int argc, const char * argv[]) { Person *p = [Person new]; [p setAge:30]; NSLog(@"age = %i, _age = %i", p->age, p->_age); return 0; }
- 如果没有会自动生成一个_开头的成员变量,自动生成的成员变量是私有变量, 声明在.m中,在其它文件中无法查看,但当可以在本类中查看
- @property只会生成最简单的getter/setter方法,而不会进行数据判断
Person *p = [Person new]; [p setAge:-10]; NSLog(@"age = %i", [p age]);
如果需要对数据进行判断需要我们之间重写getter/setter方法
- 若手动实现了setter方法,编译器就只会自动生成getter方法
- 若手动实现了getter方法,编译器就只会自动生成setter方法
- 若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量