我正在調試一個問題,偶爾會導致我的應用在崩潰報告中出現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