property属性
一般常用的property属性涉及到三个特性:
1.读写特性
2.所有者特性
3.原子特性
@property (nonatomic,readwrite,strong) NSString*price;
提供成员变量的访问方法的声明、控制成员变量的访问权限、控制多线程时成员变量的访问环境。 property不但可以在interface,在协议protocol.和类别category中也可以使用。
1.读写特性:readonly 、readwrite
在Objective-C中,拥有这样两个读写特性:readwrite和readonly,意思简单明了,就是可读可写以及只读。默认情况下,属性默认是可读可写的。
2.所有者特性
所有者特性是针对OC的内存管理
在Objective-C中,ARC下,拥有两个所有者特性:strong(默认缺省)和weak。
strong:强引用,这个特性的属性将会成为对象的持有者(引用计数+1,被强引用的对象不会被释放)
weak:弱引用,它声明的属性不会拥有这个对象的所有权,如果弱引用。(不会影响引用计数),weak常用于网络delegate属性
相同点:指向的对象被dealloc的话,弱引用的对象会被自动设置为nil。
3.原子特性
简要来说,是针对多线程而设置的。Objective-C拥有两种原子特性,分别是atomic和nonatomic。我们知道,如果使用多线程的话,有时会出现两个线程互相等待而导致的死锁现象。使用atomic特性,Objective-C可以防止这种线程互斥的情况发生,但是会造成一定的资源消耗。这个特性是默认的。而如果使用nonatomic,就不会有这种阻止死锁的功能,但是如果我们确定不使用多线程的话,那么使用这个特性可以极大地改善应用性能。相比之下,swift目前还不支持这些特性。如果我们要实现线程安全,似乎只能使用objc_sync_enter此类的方法,来保证属性的处理只有一个线程在进行。或者使用属性观察器来完成这些操作。