黑马程序员技术交流社区

标题: 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