15

我有一个可以通过结构中的静态变量访问的对象(解决方法,因为现在 swift 中缺少类变量支持),结构如下:

struct Constants{
    static var myObj = MyObject()
}

MyObject 中有一个字典,如下所示:

class MyObject{
    private var params = Dictionary<String,AnyObject>()

    func addParam(key:String, value:AnyObject){
        params[key] = value
    }
}

现在在第一次调用这个对象时Contants.myObj.addParam("param", value:123)一切都很好,并且 params 有内容["param":123]。在第二次调用时Contants.myObj.addParam("param", value:456),我得到一个 EXC_BAD_ACCESS。

这是踢球者,这仅发生在 iOS 8.1 中。此外,如果我将该行添加let stupidHack = self.params为我的方法的第一行addParam,它工作正常。我的假设是它处理字典的可变性。let 可能会在初始化后以某种方式触发字典再次可变。

以前有没有其他人遇到过这个问题?关于如何解决它的任何想法?

谢谢!

4

4 回答 4

8

看起来像一个编译器错误。

您是否尝试过在 Release 和 Debug 之间切换然后重建?如果调试工作但未发布,则可能表示编译器/优化器错误。

它也发生在模拟器中吗?

您的代码适用于带有 XCode 6.1 的 iOS 8.1。

于 2014-11-07T21:25:26.430 回答
1

碰巧,您有 64Gb 的 iPhone 6 吗?我有一个,我在两次使用字典时遇到了同样的问题。

在新闻(以及科技新闻......)中,我读到东芝为这款 iPhone 型号提供的有缺陷的内存模块可能会导致内存分配不正确。

于 2014-11-29T15:51:32.240 回答
1

尝试将 Swift 编译器优化级别调整为“无”(构建设置)。

我有一个类似的问题,一个类被无缘无故地释放,这主要是像 Lee 所说的编译器错误。

于 2015-03-04T13:32:53.603 回答
0

面对 swift 代码的类似问题,并通过在应用程序目标的构建设置中禁用 swift 编译器优化来解决此类问题。

于 2015-02-17T11:11:24.330 回答