我正在调试一个问题,偶尔会导致我的应用在崩溃报告中出现WebTryThreadLock
消息。它看起来像应用程序崩溃,因为NSUserDefaultsDidChangeNotification
正在后台线程上发送和接收。在收到通知时我会对UI进行更改,并且了解在后台线程上进行UI更改的强烈建议。由于NSUserDefaultsDidChangeNotification导致的后台线程上的用户界面变更
如果NSUserDefaultsDidChangeNotification
有时(如果不是总是)在后台线程上发送,那么处理此问题的最佳方法是什么?像下面这样的东西似乎过度但可能是必要的。
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(userDefaultsDidChange)
name:NSUserDefaultsDidChangeNotification
object:nil];
- (void)userDefaultsDidChange {
[self performSelectorOnMainThread:@selector(updateUIWithNewUserDefaults)
withObject:nil
waitUntilDone:NO];
}
- (void)updateUIWithNewUserDefaults {
// Update UI
}
这正是去了解它的方式。正如你所说的,UIKit不是线程安全的。 – Rog 2011-04-15 21:34:08