OC 中self. 与 下划线的区别

@property (nonatomic,copy) NSString *propertyName;

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

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

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

_propertyName是相似于self->_propertyName。指针

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