gpt4 book ai didi

swift - 是否可以将NotificationTokens保存在创建它们的线程之外?

转载 作者:行者123 更新时间:2023-11-30 11:35:38 24 4
gpt4 key购买 nike

(我无法在文档中找到此信息,或者不知道在哪里查找,所以如果这已经在某处进行了解释,请原谅我(链接会有所帮助)。

我的应用程序创建并使用 NSThreads 与 Realm 交互。所有线程都设置了工作运行循环,因此在它们上创建的 Realm 将自动刷新。

应用程序的不同模块使用一个名为 ReadThread 的线程来设置通知 token ,以便它们可以接收更新并执行一些处理,而不会阻塞主线程。

示例(伪代码:

ReadThread {
func performAsync(_ block: ()->Void) {
// execute block on run loop of the thread using self.perform(#selector(), on: self)
}
}

Singleton {
let readThread: ReadThread()

init {
self.readThread.start()
}
}

Main Thread:

Class A {
private var token: NotificationToken?


init {
Singleton.readThread.perform {
let token = realm.observe() { [weak self] (notification: Realm.Notification, realm) in
self?.doWork()
DispatchQueue.main.async { [weak self] in
self?.notifyUI()
}
}

DispatchQueue.main.async {[weak self] in self?.token = token }
}
}
}

这个想法是, token 是在 ReadThread 上创建的,但 token 存储在不同线程(主线程)上的实例变量中。 token 是否足够线程安全,主线程对象至少可以在 token 上调用invalidate(),或者如果主线程对象被释放, token 将自动失效?

感谢您的帮助!

最佳答案

了解到困难所在,但答案是否定的,预兆必须在生成 token 的同一线程下失效。否则,Realm.verifyThread 检查会抛出运行时异常。

关于swift - 是否可以将NotificationTokens保存在创建它们的线程之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com