黑马程序员技术交流社区
标题: OC 内存 nonatomin 的问题 [打印本页]
作者: 2的狠正经 时间: 2014-4-16 08:46
标题: OC 内存 nonatomin 的问题
在定义一个对象的时候
@ property (nonatomin, retain))NSString * name中
nonatomic 这个关键字是干什么的
作者: 于清扬 时间: 2014-4-16 09:22
nonatomic是非线程安全的,生成的setter和getter方法不加锁,但是性能高,开发中一般用这个;
对应的还有atomic 是线程安全的,生成的setter和getter方法加锁,遇到同一资源被共享的时候使用,开发中极少用到。
作者: 1722413885 时间: 2014-4-16 10:54
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
设置成员变量的@property属性时,默认为atomic,提供多线程安全。
在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
{lock}//加锁
if (property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}//解锁atomic是OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误,而这种机制是耗费系统资源的。
nonatomic禁止多线程,变量保护,提高性能。
所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
作者: 愿我能 时间: 2014-4-16 14:20
nonatomic 与atomic是多线程管理的两种方式,适用于设置@property变量参数,
atomic性能低,是默认的,但也能运行,一般是使用nonatomic,性能高,了解就行,使用方法:
@property (nonatomic, assign) int age;//如果不填默认为atomic
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |