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

OC 中self. 与 下划线的区别

时间:2015-07-22 10:44:11      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:self.   _属性   oc   局部变量   synthesize   

@property (nonatomic,copy) NSString *propertyName;

self.propertyName是对属性的访问;使用_propertyName是对局部变量的访问。

所有被声明为属性的成员,在iOS5 之前需要使用编译器指令@synthesize 来告诉编译器帮助生成属性的getter,setter方法。之后这个指令可以不用人为指定了,默认情况下编译器会帮我们生成。 编译器在生成getter,setter方法时是有优先级的,它首先查找当前的类中用户是否已定义属性的getter,setter方法,如果有,则编译器会跳过,不会再生成,使用用户定义的方法。 也就是说你在使用self.propertyName 时是在调用一个getter方法。

self.propertyName 会让计数器+1;_propertyName却不会。  

_propertyName是类似于self->_propertyName。

用self.propertyName 是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,后者容易在block中造成循环引用。

同时,使用_是获取不到父类的属性,因为它只是对局部变量的访问。

版权声明:本文为博主原创文章,未经博主允许不得转载。

OC 中self. 与 下划线的区别

标签:self.   _属性   oc   局部变量   synthesize   

原文地址:http://blog.csdn.net/aaidong/article/details/46998481

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