只怪当时_.属性和self.属性当时没有研究透,所以为自己掉入坑里埋下了伏笔。下面从我的坑开始说起:
我写了个懒加载,重写了一个数组属性的get方法,在get方法里面创建了一个数组来获取数据,那么调用这个属性的话,都是能得到数据的。怪自己为了省力加对于_.属性和self.属性理解不够,用了_.属性。然后程序运行发现数据获取不到,半天找不到原因,费了好长时间才发现错误点是在_.属性这里。用了_.属性它其实并没有调用属性的get方法,所以并没有获取数据。为了验证这个想法,写了下面的事例代码:
@property(nonatomic,strong) NSString * name; @synthesize name = _name; //重写set方法 -(void)setName:(NSString *)name{ NSLog(@"1"); _name =name; } //重写get方法 -(NSString *)name{ NSLog(@"2"); return _name; }
然后分别使用_.属性和self.属性:
1.使用_.属性
_name = @"hello"; NSString *a = nil; a = _name;
发现上面并没有打印日志。
2.使用self.属性
self.name = @"hello"; NSString *a = nil; a = self.name;
有打印日志。
结论:使用self.属性底层会自动的调用getter方法或者setter方法,而_.属性则不会,所以用_.属性时程序执行的效率更高。而在需要使用setter或者getter的时候,则不应该去使用_.属性,而应该用self.属性。
时间: 2024-11-05 02:36:37