iOS-self.和下划线访问的区别

本文转载自iOS中self.和下划线的区别ios

1.经过self.xxx的访问调用了方法:包含了set和get方法。而经过下划线的访问是获取本身的实例变量,不包含set和get的方法。spa

2.self.xxx是对属性的访问;而_xxx是对局部变量的访问。全部被声明为属性的成员,再ios5以前须要使用编译指令@synthesize 来告诉编译器帮助生成属性的getter和setter方法,以后这个指令能够不用认为的指定了,默认状况下编译器会帮助咱们生成。指针

译器在生成getter,setter方法时是有优先级的,他首先查找当前的类中用户是否认义属性的getter,setter方法,若是有,则编译器会跳过,不会再生成,使用用户定义的方法。也就是说你在使用self.xxx时是调用一个getter方法。会使引用计数加一,而_xxget

不会使用引用计数加一的。因此使用self.xxx是更好的选择,由于这样能够兼容懒加载,同时也避免了使用下滑线的时候忽略了self这个指针,后者容易在Block中形成循环引用。同时,使用 _是获取不到父类的属性,由于它只是对局部变量的访问。编译器

总结:self方法其实是用了get和set方法间接调用,下划线方法是直接对变量操做。io

相关文章
相关标签/搜索