我正在调试一个问题,偶尔会导致我的应用程序崩溃,并在崩溃报告中显示WebTryThreadLock
消息。看起来应用程序崩溃了,因为NSUserDefaultsDidChangeNotification
正在后台线程上发送和接收。我在收到通知时进行了UI更改,并了解在后台线程上进行UI更改是强烈建议的。
如果有时(如果不是总是)在后台线程上发送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
}
答案 0 :(得分:4)
您应该向UI线程的调度队列发送消息,并从那里进行UI修改。
像这样:
dispatch_async(dispatch_get_main_queue(), ^{
// your code here
});
请参阅Apple's Grand Central Dispatch documentation
---戴夫