【问题标题】:iOS 9.0 - NSMutableDictionary causing EXC_BAD_ACCESSiOS 9.0 - NSMutableDictionary 导致 EXC_BAD_ACCESS
【发布时间】:2015-09-30 06:45:20
【问题描述】:

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

// .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. 任何线索如何解决这个问题?

【问题讨论】:

  • 检查你的字典,它的键值可能为 null。
  • 你的意思是 value 是 null 或者 key 是 null ?
  • @iOS_DK,值和键不为空(肯定)。

标签: ios objective-c ios9 nsmutabledictionary


【解决方案1】:

属性上的atomic 并不意味着您认为它的作用。 atomic 表示属性值本身(即指针)被保护免受并行访问,但它根本不保护字典的内容。

如果您的代码可以在早期版本的 iOS 上运行,那么这完全是侥幸。如果您允许多个线程以这种方式访问​​单个NSMutableDictionary,您的代码将随机崩溃。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非原子也会发生同样的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2012-07-27
    • 2016-11-19
    相关资源
    最近更新 更多