近期更新了xcode至xcode12.2版本,运行老项目,会报You don’t have permission. To view or change permissions...
《2018 iOS面试题系列》 一、多线程的底层实现? 提示:1> 首先搞清楚什么是线程、什么是多线程2>Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制...
特意登录点赞
使用atomic一定是线程安全的吗?这个问题很少遇到,但是答案当然不是。atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值。但这也只是读写的锁定。跟线程安全其实还是差...
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 上真的是很不合理
之前公司项目需要,研究了一下人脸识别和活体识别,并运用免费的讯飞人脸识别,在其基础上做了二次开发,添加了活体识别。项目需要就开发了张嘴和摇头两个活体动作的识别。 这里简...
一 初识 dispatch_semaphore_t signal 二 实战:利用 dispatch_semaphore_t signal 组织一个并发数是10 的一个多线程工...
Django中提示TemplateDoesNotExist解决 尝试了配置DIRS为绝对路径等方法,均无效,之后改为空,亲测bug消失 在settings.py中找到 TEM...