首页 > 解决方案 > 访问类属性时的 EXC_BAD_ACCESS

问题描述

我有一个非常简单的代码,但是当我调用它时,它会因错误testFunc()而崩溃。谁能解释一下,为什么会这样?value = NSObject()EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

class A {
    var object: Any?
    
    convenience init() {
        self.init(nil)
    }
    
    private init(_ object: Any?) {
        self.object = object
    }
}

class B: A {
    var value: Any?
    
    func test() {
        value = NSObject()
    }
}

func testFunc() {
    let b = B()
    b.test()
}

标签: swift

解决方案


如果我在 Mac 命令行工具中运行您的代码,它就可以正常工作。如果我将它作为 iOS 游乐场运行,它会崩溃。

对我来说,它看起来像是操场上的错误。(这不会是第一次。我发现 Playground 非常不稳定,并且倾向于使用命令行工具而不是 Playground 来测试非 UI 编码想法,因为我发现 Playground 不稳定且不可靠。)

我尝试在不同点添加打印语句,并且第一次添加打印语句时它没有崩溃。然后几个编辑/运行周期后,它没有再次崩溃。我看不出你的代码有什么问题(除了它实际上没有做任何事情,并且创建一个空的 NSObject 没有真正意义。)


推荐阅读