iOS线程安全

在GCD出现之前,有两种方法

第一种是采用内置的“同步块”(synchronization block)

iOS线程安全_第1张图片
Snip20160726_1.png
iOS线程安全_第2张图片
Snip20160726_2.png

第二种是直接使用NSLock

iOS线程安全_第3张图片
Snip20160726_3.png
Snip20160726_5.png

上面两种方法都很好,不过有缺陷。在极端情况下,同步块会导致死锁,效率也不高。

替代方法就是GCD,它能以简单,高效的形式为代码加锁

1.可以这样做,使用“串行同步队列”,将读取操作与写入操作都放在同一个队列里面,既可以保证数据同步

iOS线程安全_第4张图片
Snip20160726_12.png
iOS线程安全_第5张图片
Snip20160726_13.png

2.最好的做法 利用并发队列和栅栏 。(获取方法可以并发执行,保证设置方法和获取方法不能并发执行,就可以保证数据安全)

iOS线程安全_第6张图片
Snip20160726_14.png
iOS线程安全_第7张图片
Snip20160726_19.png
iOS线程安全_第8张图片
Snip20160726_20.png
iOS线程安全_第9张图片
Snip20160726_21.png
iOS线程安全_第10张图片
Snip20160726_18.png

--摘自 编写高质量oc52个有效方法-41条
不错的书~

你可能感兴趣的:(iOS线程安全)