GCD的“艺术”
- http://www.cocoachina.com/industry/20140428/8248.html(1)
- http://www.cocoachina.com/industry/20140515/8433.html(2)
以下为摘要:
|
|
//让类本身线程安全
打开 PhotoManager.m,添加如下私有属性到类扩展中:
- @interface PhotoManager ()
- @property (nonatomic,strong,readonly) NSMutableArray *photosArray;
- @property (nonatomic, strong) dispatch_queue_t concurrentPhotoQueue; ///< Add this
- @end
找到 addPhoto: 并用下面的实现替换它:
|
|
####你新写的函数是这样工作的:
- 在执行下面所有的工作前检查是否有合法的相片。
- 添加写操作到你的自定义队列。当临界区在稍后执行时,这将是你队列中唯一执行的条目。
- 这是添加对象到数组的实际代码。由于它是一个障碍 Block ,这个 Block 永远不会同时和其它 Block 一起在 concurrentPhotoQueue 中执行。
- 最后你发送一个通知说明完成了添加图片。这个通知将在主线程被发送因为它将会做一些 UI 工作,所以在此为了通知,你异步地调度另一个任务到主线程。
这就处理了写操作,但你还需要实现 photos 读方法并实例化 concurrentPhotoQueue 。