您可能已经体验过,访问非线程安全变量是一件令人头疼的事情。一种简单的iOS
解决方案是使用关键字 @synchronized
,这将增加NSLock
以确保数据可以被唯一的一个线程访问,缺点如下:
锁太多会大大降低应用程序的性能,尤其是在被主线程调用时。
当逻辑变得复杂时,就会发生死锁。
基于以上考虑,我们更倾向于使用串行队列来处理,每个线程安全的关键操作都会追加到队列的末尾,这是一个很好的解决方案,但问题是所有的访问接口都应该设计成异步风格,见下一篇。
-(id)objectForKey:(NSString *)key;
调用这个类的人并不愿意以这种方式进行设计。有这方面经验的朋友请一起分享和讨论。