A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2的狠正经 中级黑马   /  2014-4-16 08:46  /  1627 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在定义一个对象的时候
@ property (nonatomin, retain))NSString * name中
nonatomic 这个关键字是干什么的

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

3 个回复

倒序浏览
nonatomic是非线程安全的,生成的setter和getter方法不加锁,但是性能高,开发中一般用这个;
对应的还有atomic 是线程安全的,生成的setter和getter方法加锁,遇到同一资源被共享的时候使用,开发中极少用到。

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。

设置成员变量的@property属性时,默认为atomic,提供多线程安全。

在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
                        {lock}//加锁
                                if (property != newValue) {
                                        [property release];
                                        property = [newValue retain];
                                }
                        {unlock}//解锁
atomic是OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误,而这种机制是耗费系统资源的。
nonatomic禁止多线程,变量保护,提高性能。

所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。



评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报 1 0
nonatomic 与atomic是多线程管理的两种方式,适用于设置@property变量参数,
atomic性能低,是默认的,但也能运行,一般是使用nonatomic,性能高,了解就行,使用方法:
@property (nonatomic, assign) int age;//如果不填默认为atomic
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马