提问者:小点点

合并运算符EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000为零的Swift崩溃


我在下面的行中得到一个崩溃EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000,不知道为什么。

let personManager = PersonManager.shared ?? PersonManager(user: firebaseUser)

。。。在此代码块中。。。

AppUtils.getFirebaseUser { firebaseUser in
    let personManager = PersonManager.shared ?? PersonManager(user: firebaseUser)
    if personManager.peopleHaveLoaded() {
        ...
    } else {
        ...
    }
}

PersonManager.Swift

class PersonManager: NSObject {
    public static var shared: PersonManager?
    init(user: User) {
        ...
        super.init()
        PersonManager.shared = self
    }

    ...
}

我假设会发生的情况是,如果PersonManager.sharednil,那么nil合并运算符将调用init函数,因此无论哪种情况,它都保证有一个实例。

我知道,当您有一个悬空指针时,您通常会看到崩溃,但我认为nil合并运算符??可以解决这个问题。 你知道为什么它会崩溃吗?


共1个答案

匿名用户

可能是种族问题。 同时在两个线程上访问PersonManager.Shared。