我正在编写一个NSObject
类似于 的子类NSCache
,它可以将文件缓存到 iOS 设备上的磁盘。
我正在为 (i) 读取 (ii) 写入编写队列,但我想确保我将创建的队列类型是正确的,因此不会导致文件在未来。
对于读取队列,我计划创建一个并发队列,因为可以同时读取多个文件而不会出现任何问题。
然而,对于写入队列,我计划创建一个串行队列以防止一次写入多个文件。
你能告诉我这是否是正确的方法吗?
我正在编写一个NSObject
类似于 的子类NSCache
,它可以将文件缓存到 iOS 设备上的磁盘。
我正在为 (i) 读取 (ii) 写入编写队列,但我想确保我将创建的队列类型是正确的,因此不会导致文件在未来。
对于读取队列,我计划创建一个并发队列,因为可以同时读取多个文件而不会出现任何问题。
然而,对于写入队列,我计划创建一个串行队列以防止一次写入多个文件。
你能告诉我这是否是正确的方法吗?
dispatch_sync
为了获得更好的性能,我建议使用用于读取和dispatch_barrier_async
写入的并发队列。正如迈克·阿什所说:
因为这使用了屏障功能,所以它确保了在块运行时对缓存的独占访问。它不仅在运行时排除对缓存的所有其他写入,而且还排除所有其他读取,从而使修改安全。
根据您的后续评论,我认为您正在寻找的模式/用法是一个串行队列(每个缓存对象/文件一个),其中 dispatch_async()'d 块用于写入缓存条目和 dispatch_sync()(注意差异)阅读它们。串行队列上的写入可以是异步的,这仍然会使它们保持有序,并且执行同步读取将强制完成所有挂起的写入,然后再尝试读取一个值。