由于NSUserDefaultsDidChangeNotification,后台线程的UI更改

我正在调试一个问题,偶尔会导致我的应用程序崩溃,并在崩溃报告中显示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 } 

您应该向UI线程的调度队列发送消息,并从那里进行UI修改。

喜欢这个:

 dispatch_async(dispatch_get_main_queue(), ^{ // your code here }); 

请参阅Apple的Grand Central Dispatch文档

—戴夫