事先说好 前不久看到 @sunnyxx 想找一个性取向正常的实习生帮他分担一点工作量,当想起他和 @ibireme 秀的亲密自拍后我就知道事情并没有这么简单→_→。但是作为...
事先说好 前不久看到 @sunnyxx 想找一个性取向正常的实习生帮他分担一点工作量,当想起他和 @ibireme 秀的亲密自拍后我就知道事情并没有这么简单→_→。但是作为...
po主理解错了。atomic是绝对安全的。
我们知道,在64位的操作系统下,所有类型的指针,包括void * 都是占用8个字节的。超过4个字节的基本类型数据都会有线程并发的问题。
那所有的指针类型都会有这个问题。
以oc 下的 NSArray * 为例子,如果一个多线程操作这个数据,会有两个层级的并发问题
1、指针本身
2、指针所指向的内存
指针本身也是占用内存的,并且一定是8个字节,第二部分,指针所指向的内存,这个占多少字节就不一定了,有可能非常大,有可能也就1个字节
所以我们考虑NSArray * array 这个数据array 多线程操作的时候,必须分成两部分来描述,一个是&array这个指针本身,另一个则是它所指向的内存 array
大家注意下 &array 和 array 的区别 ,其实不用纠结,你就想象现在有两块内存,一块是8字节,一块n字节,8字节里面放的值,就是n字节内存的首地址,
ok 现在联系上atomic,如果用@property(atomic)NSArray *array 修饰之后,会有什么影响?网上说的很多,不再赘述,我只想从内存的角度来解释这个过程
首先第一点,你要记住,@property(atomic)NSArray *array 其实修饰的是这个指针,也就是这个8字节内存,跟第二部分数据n字节没有任何关系,被atomic 修饰之后,你不可能随意去多线程操作这个8字节,但是对8字节里面所指向的n字节没有任何限制!这就是所有网络上所说的 atomic 不安全的真相 !!!
我们来看一下,这能怪atomic? 本身你修饰的是一个指针,并且atomic 已经完美的履行了它的指责,你现在不可能对这个8字节进行无序的多线程操作,这就够了呀!atomic没有任何鸟问题。有问题的是人,你本身并未对n字节做任何的限制,所以把问题怪罪到atomic 上真的是很不合理
四步走: 一、封装自己的轮子 创建自己的工程,编写代码。 pod lib create 工程名称 给自己的项目打上tag git tag -a 0.0.1 -m 'relea...
注:欢迎大家可以关-注 Wei-Xin 公-众-号 :Style月月专栏,与简书同步更新~ Swift-进阶 01:Swift源码编译[https://www.jianshu...
花时间写了个Demo,包含比较全面从UIView,UILabel,UIImageView的自适应到UITextView,UITableView,UICollectionVie...
有时候我们需要直接获取到当前显示的UINavigationController,以便于后续操作,获取方法如下。此方法可以获取present出来的UINavigationCon...
很多人弄不懂这四个名词,网上也有很多的误导。对于线程死锁更是解释的五花八门、煞有介事的样子。 一.引出此文的元凶---网上的曲解 经过我的代码验证,事实是只写: 也会造成死锁...
本文章所使用的微信sdk版本为1.8.6。 UniversalLink配置的问题 首先是配置app的UniversalLink这里有配置教程https://www.jians...
作为一个资深(自认为)iOS程序猿,会经常用到轮播图,但是总是感觉自己实现要比直接用别人的要方便一点,并且有一些需求需要深度定制,于是想着自己封装一个可以定制化的轮播图库JC...