(我无法在文档中找到这些信息,或者不知道在哪里查看,所以请原谅我,如果已经在某处解释过(链接会有所帮助)。
我的应用创建并使用NSThreads与Realm进行交互。所有线程都在其上设置了Run Loops,因此在它们上创建的Realms将自动刷新。
应用程序使用一个名为ReadThread的线程来设置通知令牌,以便他们可以接收更新并进行一些处理而不会阻塞主线程。
示例(伪代码:
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 }
}
}
}
我们的想法是在ReadThread上创建令牌,但令牌存储在不同线程(主线程)上的实例变量中。令牌线程是否足够安全,主线程对象可以在令牌上调用invalidate(),或者如果主线程对象被释放,令牌将自动失效?
感谢您的帮助!
答案 0 :(得分:0)
学到了很难,但答案是否定的,预兆必须在生成令牌的同一个线程下失效。否则,Realm.verifyThread检查将抛出运行时异常。