Object-C @property 小结

@property与@synthesize : http://www.jianshu.com/p/bcf734db475c

声明:属性要在头文件中声明,声明格式为: @property (attributes) type propertyName; 

一、@property 是什么?

属性就是一种支持访问对象成员变更的快捷的方法,可以自动的生成setter和getter方法(setter只支持传一个参数)。

二、使用

声明一个属性,如果没有声明为只读的,它默认会生成两个方法
- (type)name ;
- (void)setName;
为了可读性等其它原因,也可以改变属性的setter和getter访问名称
@property  (setter=setMyValue, getter=getBool) NSInteger  value;
[obj setMyValue:10] 和 [obj getBool]分别覆盖set、get方法。



三、@property的修饰属性(attributes )

可读性:readwrite / readonly ,不写的话默认为readwrite,即会合成setter和getter方法。
原子性:nonatomic / 【默认】,系统默认setter和getter为原子操作(没有atomic关键字),如果想设置为非原子操作,可以nonatomic。
内存 :assign / retain / weak / strong 
在非ARC环境下, assign为默认,引用计数不变;
retain引用计数加1;
在引用计数环境下,默认为strong,与retain作用相同;
从5.0系统后引入了weak,作用与assign相似,不过当所指向对象引用为0时,自动置为nil。

四、 nonatomic与atomic的区别与作用

1.atomic是线程安全的,nonatomic是线程不安全的。
2.如果只是单线程操作的话用nonatomic最好,因为后者效率高一些。 

atomic是oc使用的一种线程保护技术,基本上来讲,就是防止在写入未完成的时候被另外一个线程读取,造成数据错误。
而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

你可能感兴趣的:(Object-C @property 小结)