ios - 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.shared
is nil
then nil 合并运算符将调用该init
函数,因此无论哪种方式都可以保证有一个实例。
我知道当你有一个悬空指针时你通常会看到崩溃,但我认为 nil 合并运算符??
会处理这个问题。关于它为什么崩溃的任何想法?
解决方案
这可能是比赛条件问题。PersonManager.shared 同时在两个线程上访问。
推荐阅读
- postgresql - 使用或不使用 PostGIS 在 PostgreSQL 中存储 3D 笛卡尔坐标?
- linux - Nginx - 当 nginx 突然终止时清理崩溃转储
- css - 无法将自定义样式应用于 SweetAlert2
- java - 如何使用 Java 在 Elasticsearch 中上传 Json 数据或文件?
- openiddict - 如何使用数据库存储?
- file - Camel 文件组件 - sortBy 选项不起作用
- c# - 如何从 google oath2 获取 access_token 到类库中
- pandas - 如何通过从每个列中获取数据来添加新列?
- excel - 在 VBA 脚本中按索引号引用表的正确语法是什么
- javascript - Vue中如何放变量