属性关键字

2017-10-26  本文已影响30人  春暖花已开

@property的属性关键字有:readwrite、readonly、assign、weak、strong、retain、copy 、nonatomic、atomic
其中,
ARC:assign、weak、strong、copy、nonatomic、atomic
MRC:assign、retain、copy、nonatomic、atomic

1、assign(MRC/ARC)与weak(ARC):

The main difference between weak and assign is that the with weak, once the object being pointed to is no longer valid, the pointer is nilled out. Assigning the pointer the value nil avoids many crashes as messages sent to nil are essentially no-ops”

意思是说:weakassign多了一个功能就是当属性所指向的对象消失的时候(也就是内存引用计数为0)会自动赋值为nil,这样再向weak修饰的属性发送消息就不会导致野指针操作crash。
所以,在ARC模式下编程时,指针变量一定要用weak修饰,例如delegate,一定要用weak修饰,而基本数据类型、结构体、枚举需要用assgin

2、NSString是用copy还是strong?
3、Strong(ARC)(修饰对象)
  1. 直接赋值并且对象的引用计数器 +1 。
  2. 在 ARC 里替代了 retain 的作用 。
4、retain(MRC)

release 旧对象( 旧对象计数器 -1 ) ,retain 新对象( 新对象计数器 +1 ) , 然后指向新对象 。

5、copy(MRC/ARC)

其中:

MRC下:

release 旧对象( 旧对象的引用计数器 -1 ) ,copy 新对象( 新对象的引用计数器 +1 ) ,然后指向新对象 。(新对象是指最终指向的那个对象,不管深拷贝还是浅拷贝)
如:

if (_dog) { 
[_dog release]; 
} 
_dog = [dog copy];
ARC下:

copy 新对象( 新对象的引用计数器 +1 ) ,然后指向新对象。
如:

_dog = [dog copy];
6、nonatomic (ARC/MRC)
  1. 不对set方法加同步锁 。
  2. 性能好。
  3. 线程不安全。
7、readonly (只读)
  1. 让 Xcode 只生成get方法 。
  2. 不想把暴露的属性被人随便替换时 ,可以使用 。
8、readwrite (读写)(默认)
  1. 让 Xcode 生成get/set方法 。
  2. 不用 readonly 修饰时 , 默认就是 readwrite 。
上一篇 下一篇

猜你喜欢

热点阅读