iOS 9.0-导致EXC\u访问错误的NSMutableDictionary
我的应用程序包含一个表示一般数据的单例类。后者包含以下原子属性:iOS 9.0-导致EXC\u访问错误的NSMutableDictionary,ios,objective-c,ios9,nsmutabledictionary,Ios,Objective C,Ios9,Nsmutabledictionary,我的应用程序包含一个表示一般数据的单例类。后者包含以下原子属性: // .h file @property (atomic, strong) NSMutableDictionary *dataDictionary; // .m file @synthesize dataDictionary; 字典在不同的线程(setter和getter)上同时使用,在ios6.0-8.4上正常工作,没有任何崩溃。 最近我在iOS 9.0模拟器上运行了这个应用程序,它在调用dictionarysetObjec
// .h file
@property (atomic, strong) NSMutableDictionary *dataDictionary;
// .m file
@synthesize dataDictionary;
字典在不同的线程(setter和getter)上同时使用,在ios6.0-8.4上正常工作,没有任何崩溃。
最近我在iOS 9.0模拟器上运行了这个应用程序,它在调用dictionarysetObject:forKey:
方法的任意代码中崩溃(EXC\u BAD\u ACCESS)
属性上的原子属性
并不意味着您认为它的功能atomic
意味着属性值本身(即指针)不受并行访问的保护,但它根本不保护字典的内容
如果您的代码在以前版本的iOS上运行,那么这完全是侥幸。如果允许多个线程以这种方式访问单个NSMutableDictionary
,则代码将随机崩溃
您需要在这些多线程之间添加某种类型的锁定规则。我认为您应该使用非原子而不是原子。检查字典,它的键可能有null值。您的意思是value为null或key为null?@iOS_DK,value和key不为null(当然)。非原子也会发生同样的行为。