iOS 9.0 - NSMutableDictionary导致EXC_BAD_ACCESS

时间:2015-09-30 06:45:21

标签: ios objective-c ios9 nsmutabledictionary

我的应用程序包含一个代表一般数据的单例类。后者包含以下原子属性:

// .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)。

  1. 有谁知道iOS 9.0中哪些内容可能会导致崩溃?
  2. 任何线索如何解决这个问题?
  3. enter image description here

    enter image description here

2 个答案:

答案 0 :(得分:2)

财产上的

atomic并不代表您的想法。 atomic表示属性值本身(即指针)受到保护而不受并行访问的影响,但它根本不保护字典的内容。

如果您的代码适用于以前版本的iOS,则完全由侥幸完成。如果您允许多个线程以这种方式访问​​单个NSMutableDictionary,您的代码将随机崩溃。

您需要在这些多个线程之间添加某种锁定规则。

答案 1 :(得分:0)

我认为你应该使用非原子而不是原子