0

您可能已经体验过,访问非线程安全变量是一件令人头疼的事情。一种简单的iOS解决方案是使用关键字 @synchronized,这将增加NSLock以确保数据可以被唯一的一个线程访问,缺点如下:

  1. 锁太多会大大降低应用程序的性能,尤其是在被主线程调用时。

  2. 当逻辑变得复杂时,就会发生死锁。

基于以上考虑,我们更倾向于使用串行队列来处理,每个线程安全的关键操作都会追加到队列的末尾,这是一个很好的解决方案,但问题是所有的访问接口都应该设计成异步风格,见下一篇。

-(id)objectForKey:(NSString *)key;

调用这个类的人并不愿意以这种方式进行设计。有这方面经验的朋友请一起分享和讨论。

4

1 回答 1

0

最终的解决方案是使用 NSUserDefault 来存储小数据,对于大的缓存数据,将它们放在我们自己维护的文件中。

根据 Apple 文档, NSUserDefault 的优势是线程安全的,并且会定期同步工作。

于 2014-06-10T02:32:43.387 回答