1、atomic ->线程安全的,较影响性能 nonatomic -> 线程不安全,推荐使用的,从下图可以看出实际上atomic线程高并发时候也并不安全。

2、 @synchronized 的作用是创建一个互斥锁,保证在统一时间对对象的访问唯一,在下图中就已经可以保证线程访问安全了,不过需要注意的是这边的互斥锁锁的是要修改的对象的属性 的对象,就如下图中锁住的是self,而操作的是self的属性。

3、NSLock的使用

4、dispatch_semaphore利用信号量进行锁定

5、最后聊一下单类吧,全局有且只有一个dispatch_once_t,推荐使用dispatch_once的方法来书写,相对性能会好些

网友评论