iOS开发-基础:Object-C 中self. 与 下划线的区别
2015-10-09 14:20
573 查看
@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中造成循环引用。
@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中造成循环引用。
相关文章推荐
- JAVA基础——JSONObject,JSONArray 的一些常见用法
- java:所有东西都是对象,所以根类就是Object
- 《SICP》读书笔记--Chapter 3 Modularity, Objects and State
- object类型转string类型(的三种方法)
- Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
- OC基础17:归档
- Objective-C---9---内存管理 补充
- 关于 error while loading shared libraries: libfaac.so.0: cannot open shared object file: No such fi
- java.lang.String中equals(Object anObject)与compareTo(String anotherString)的区别
- JSONObject
- Xcode中的全局异常断点
- 设计模式之模板方法模式&&迪米特法则(代码Objective-C展示)
- Object类
- OC中id和NSobject区别
- 设计模式-COMMOND PATTERN (ACTIVE OBJECT PATTERN是一种特殊的COMMOND PATTERN)
- objective_c
- objective_c
- Objective-C学习-区别方法isKindOfClass、isMemberOfClass和isSubclassOfClass
- php中将SimpleXMLElement Object转化为普通数组
- Object-c中的+ -号函数