码迷,mamicode.com
首页 > 其他好文 > 详细

_.属性和self.属性,我遇到的那些坑

时间:2016-06-14 17:34:21      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

  只怪当时_.属性和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.属性。

 

_.属性和self.属性,我遇到的那些坑

标签:

原文地址:http://www.cnblogs.com/fangwenkai/p/5584692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!