首页 > 解决方案 > Swift 崩溃与 nil 合并运算符 EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000

问题描述

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
    }

    ...
}

我假设会发生的是 if PersonManager.sharedis nilthen nil 合并运算符将调用该init函数,因此无论哪种方式都可以保证有一个实例。

我知道当你有一个悬空指针时你通常会看到崩溃,但我认为 nil 合并运算符??会处理这个问题。关于它为什么崩溃的任何想法?

标签: iosswiftfirebase-authentication

解决方案


这可能是比赛条件问题。PersonManager.shared 同时在两个线程上访问。


推荐阅读