容器类和非容器类,线程安全和非线程安全,nonatomic和atomic
2016-03-05 17:59
190 查看
容器类和非容器类:程序中我们经常会处理大量的数据,这些数据可能是基本类型,如int、float,也有可能是自己实现的类。于是,我们就会用到,能够容纳并且处理这些数据的容器。在Objective-c中,准确的说是Foundation库中,已经为我们提供了比较好用的容器。主要有NSArray、NSSet和NSDictionary,以及他们的Mutable子类。
转载文章出处:/article/2957679.html
nonatomic和atomic
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
atomic
设置成员变量的@property属性时,默认为atomic,提供多线程安全。
在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
{lock}
if
(property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}
nonatomic
禁止多线程,变量保护,提高性能。
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了
nonatomic ,那么访问器只是简单地返回这个值。
转载文章出处:/article/2957679.html
nonatomic和atomic
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
atomic
设置成员变量的@property属性时,默认为atomic,提供多线程安全。
在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
{lock}
if
(property != newValue) {
[property release];
property = [newValue retain];
}
{unlock}
nonatomic
禁止多线程,变量保护,提高性能。
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定 nonatomic ,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了
nonatomic ,那么访问器只是简单地返回这个值。
相关文章推荐
- PHP 图片上传生成缩略图代码
- zabbix 发送带图片的报警信息到微信
- iPhone 的状态栏
- 随机生成30道四则运算(一)
- 找工作——多线程
- CSS编码规范(转)
- HTTP常用状态码
- PHP 中实现GZIP压缩页面输出实例
- _findfirst _findnext _findclose 文件(夹)不能删除
- 继承,多态,类
- 堆和栈的区别 ?
- int 转 char* ,char* 转 int
- LeetCode - 38. Count and Say
- PHP 读取数据库内容并以二维数组按指定列输出实例
- C++学习之引用特性
- 双向链表的基础操作(C++实现)
- 20145107《Java程序设计》第一周学习计划
- 20145320 《Java程序设计》第1周学习总结
- iOS 开发--NSMutableArray使用枚举方法
- Strut2错误