文档章节

iOS开发多线程篇---atomic nonatomic区别

琳小兮
 琳小兮
发布于 2015/03/02 16:31
字数 612
阅读 7.4K
收藏 6

码上生花,ECharts 作品展示赛正式启动!>>>

  • atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。
    nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

  • atomic的意思就是setter/getter这个函数,是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样,可以保证数据的完整性。nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。因此,在多线程的环境下原子操作是非常必要的,否则有可能会引起错误的结果。

  • 比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态,这样取到的东西会有问题,就是不完整的。当然如果不需要多线程支持的话,用nonatomic就够了,因为不涉及到线程锁的操作,所以它执行率相对快些。

  • 下面是载录的网上一段加了atomic的例子:

  •   {lock}
                                    if (property != newValue) { 
                                            [property release]; 
                                            property = [newValue retain]; 
                                    }
                            {unlock}

  • 可以看出来,用atomic会在多线程的设值取值时加锁,中间的执行层是处于被保护的一种状态,atomic是oc使用的一种线程保护技术,基本上来讲,就是防止在写入未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

  • 转载自 https://www.52mdmx.cn/show/kvEAMeWdr7aR0VNb.html

 

© 著作权归作者所有

琳小兮
粉丝 30
博文 66
码字总数 31060
作品 0
襄阳
程序员
私信 提问
加载中
此博客有 6 条评论,请先登录后再查看。
iOS进阶之atomic一定是线程安全的吗(10)

IOS项目中nonatomic和atomic分析 一、 10000个异步任务,修改name属性的值 执行结果:崩溃,崩溃原因是在子线程Thread8上,对象释放了。 结果分析: 1、在MRC模式下,属性name的set方法如下 ...

shifang07
2019/09/06
0
0
2019年,iOS 面试题持续更新(附答案)

这个栏目将持续更新--请iOS的小伙伴关注! 1、多线程的应用 2、GCD实现多个请求都完成之后返回结果 3、A、B两个int数组,得到A数组中B数组不包含的元素 4、事件传递链,页面上一个按钮,按钮和...

猿_员
2019/01/26
0
0
【iOS】定义@property时常用的修饰词介绍

iOS编程中,定义成员变量常用格式如下: 常用的修饰词有atomic,nonatomic,copy,assign,strong,weak,readonly,readwrite等。面试中也会常常被问到这些修饰词的含义及其之间的区别,其本...

浅浅青丘
2018/06/13
0
0
iOS 多线程之 NSThread的基本使用

一个NSThread对象就代表一条线程 下面是NSThread开启线程的方法 - (void)touchesBegan:(NSSet<UITouch > )touches withEvent:(UIEvent *)event { } (void) openThreadWithNSThread { } (voi......

osc_8xavvdt3
2018/03/05
2
0
做了5年iOS,靠着这份面试题跟答案,我从12K变成了30K

在博主认为,对于iOS面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在...

卓远
03/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java http大文件断点续传上传插件

我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包...

osc_b9r67jnt
20分钟前
25
0
为什么互联网公司都喜欢自研业务系统?

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 编者按:本文来自微信公众号“PM杨堃”(ID:pmYangKun),作者:杨堃,36氪经授权发...

osc_13sujivn
21分钟前
21
0
ATFX安全知识:被骗和亏损严重怎么追回

郎中治病需要对症下药,才能做到药到病除。而投资者账户资金亏损惨重也需要分清是因为被骗还是由于交易操作失利导致。如果亏损后一厢情愿以为被骗了或者认吃亏都是无法帮助挽回损失的。ATFX小...

osc_696ni6tr
22分钟前
16
0
现在哪款视频转换器比较好用?

这个问题大家可问对人了,今天英子会介绍一款实用的视频转换器软件——迅捷视频转换器(提供视频优化、视频转GIF、视频配乐、视频压缩、视频截图、视频水印、视频转换等九大功能)。它已经躺...

真不莲
22分钟前
5
0
如何利用小程序提高实体店销量?

实体店销售难,这是一个事实,尤其是在2020年的疫情中,我们更是注意到实体店的压力颇大。面对淘汰的风险,商家的求生欲告诉自己要不断改革。小程序似乎是实体店的突破口,生存与否就看这个应用...

osc_3s78f0to
22分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部