我的应用程序包含一个代表一般数据的单例类。后者包含以下原子属性:
// .h file
@property (atomic, strong) NSMutableDictionary *dataDictionary;
// .m file
@synthesize dataDictionary;
字典同时从不同的线程(setter和getter)使用,并且在iOS 6.0 - 8.4上正常工作而没有任何崩溃。
最近我在iOS 9.0模拟器上运行了应用程序,并在调用字典setObject:forKey:
方法的任意代码中崩溃(EXC_BAD_ACCESS)。
答案 0 :(得分:2)
atomic
并不代表您的想法。 atomic
表示属性值本身(即指针)受到保护而不受并行访问的影响,但它根本不保护字典的内容。
如果您的代码适用于以前版本的iOS,则完全由侥幸完成。如果您允许多个线程以这种方式访问单个NSMutableDictionary
,您的代码将随机崩溃。
您需要在这些多个线程之间添加某种锁定规则。
答案 1 :(得分:0)
我认为你应该使用非原子而不是原子