我正在编写一个类似于NSObject
的{{1}}子类,它可以在iOS设备上启用文件缓存到磁盘。
我正在为(i)阅读(ii)写入而编写队列,但我想确保我将创建的队列类型是正确的,因此不会导致文件成为问题将来腐败。
对于读取队列,我计划创建一个并发队列,因为可以同时读取多个文件而没有任何问题。
但是,对于写入队列,我计划创建一个串行队列,以防止同时写入多个文件。
你能告诉我这是否是正确的做法?
答案 0 :(得分:1)
为了获得更好的性能,我建议一个并发队列,dispatch_sync
用于读取,dispatch_barrier_async
用于写入。正如Mike Ash puts it:
因为它使用屏障功能,所以它确保在块运行时对缓存进行独占访问。它不仅会在运行时排除对缓存的所有其他写入,而且还会排除所有其他读取,从而使修改安全。
答案 1 :(得分:0)
根据您的跟随评论,我认为您正在寻找的模式/用途是一个串行队列(每个缓存对象/文件一个),其中dispatch_async()用于写入缓存条目的块和dispatch_sync()(注意阅读它们。写入在串行队列上可以是异步的,这仍然会使它们保持有序,并且执行同步读取将强制所有挂起的写入在尝试读取值之前完成。