iOS 属性关键字
2019-04-11 本文已影响3人
飞不越疯人院
1. 读写权限
-
readonly
:只读属性; -
readwrite
:可读可写(默认);
2. 原子性
-
atomic
:原子性(系统默认); -
nonatomic
:非原子性
atomic
修饰的一定是线程安全吗?看这里
3. 引用计数
-
retain/strong
:修饰对象, 分别用在MRC和ARC环境下, 引用计数+1; -
assign
:可以修饰基本数据类型和对象; -
unsafe_unretained
:在明确对象的生命周期的时候,可以使用unsafe_unretained
替代weak
,可以略微提升性能; -
weak
:修饰对象;常用于修饰代理解决循环引用问题; -
copy
:开发中用于修饰block
,NSString
,NSArray
等;知识点
4. assign
和weak
对比
assign | weak |
---|---|
可以修饰基本数据类型和对象 | 只能修饰对象 |
修饰对象的时候不会改变其引用计数 | 修饰对象的时候不会改变其引用计数 |
会产生悬垂指针,所修饰对象被释放后指针仍然指向原地址,如果访问可能会产生内存泄漏 | 所修饰对象被释放后会自动置为nil
|
补充:MRC
下重写retain
修饰的变量的setter
方法
@property (nonatomic, retain) NSString *name;
- (void)setName:(NSString *)name {
if (_name != name) {
[_name release];
_name = [name retain];
}
}
//判断_name! = name是否有必要? 有必要; 如果不判断直接走里面的逻辑, 那么有可能_name直接被release掉了, 下面再调用_name会出现不可预知问题;
参考文章
iOS unsafe_unretained 的理解和使用
iOS weak修饰符的实现原理
iOS 常用属性的关键字的使用说明