用@property定义属性时,会自动生成getter和setter方法,还会生成一个带下划线的成员变量 _xx。
这个带下划线的成员变量 _xx主要用于以后再setting方法中记录到底setter了什么内容。
比如:懒加载就用 _xx,而不能用self.xx
-(NSArray *)apps
{
if (!_apps) {
NSArray *dictArray=[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil ]];
NSMutableArray *appArray =[NSMutableArray array];
for (NSDictionary *dict in dictArray) {
ZWApp *app=[ZWApp appWithDict:dict];
[appArray addObject:app];
}
_apps=appArray;
}
return _apps;
}
注意一点就是如果手动生成了setter和getter方法,它就不会帮你生成一个带下划线的成员变量 _xx。
另外如果@property(nonatomic,strong,readonly)
有readonly属性时,@property就只会生成getter方法,还会生成一个带下划线的成员变量 _xx,没有setter方法。
同样注意一点就是如果手动生成了getter方法,它就不会帮你生成一个带下划线的成员变量 _xx。
总结,自动生成都会帮你生成生成一个带下划线的成员变量 _xx,而手动生成的话它就不会帮你生成一个带下划线的成员变量 _xx。