nya*_*nev 9 cocoa-touch properties objective-c ios
我想知道:iPhone开发中的所有属性应该是nonatomic什么?如果是这样,为什么?
来自Objective-C编程语言,强制性指南:
您可以使用此属性指定访问者方法不是原子的.(没有关键字来表示原子.)
nonatomic
指定访问者是非原子的.默认情况下,访问器是原子的.
默认情况下,属性是原子的,因此合成访问器提供对多线程环境中属性的强大访问 - 也就是说,无论其他线程同时执行什么,始终完全检索或设置从getter返回的值或通过setter设置的值.有关更多详细信息,请参阅"性能和线程".
如果指定retain或未copy指定nonatomic,则在引用计数环境中,对象属性的合成get访问器使用锁并保留并自动释放返回的值 - 实现将类似于以下内容:
[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
Run Code Online (Sandbox Code Playgroud)
如果指定nonatomic,则对象属性的合成访问器只是直接返回值.
属性可以是atomic或nonatomic.
如果你声明一个nonatomic属性,那么写入它将会快得多,但它不会是线程安全的.
如果你声明一个atomic属性,那么写入将是线程安全的,但它会慢得多(因为它必须同步它,所以没有其他人接触它)
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |