Мне не ясно, насколько небезопасна работа с объектами пользовательского интерфейса. У меня есть код, который я только что переместил в другую очередь (используя NSOperation и NSOperationQueue). Я проверяю, где мне нужно очистить небезопасный код, и наткнулся на это:
alertNoDatabaseSelected = [[[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"You Haven't Enabled Any Databases", nil)
message:[NSString stringWithFormat:NSLocalizedString(@"You can't search unless you choose at least one database in your settings.", nil), self.currentSearchEntity.keywords]
delegate:self cancelButtonTitle:NSLocalizedString(@"Settings", nil)
otherButtonTitles:nil] autorelease];
[alertNoDatabaseSelected show];
Являются ли обе эти линии небезопасными вне основного потока? У меня есть некоторые сбои, и это похоже на первый тип рефакторинга, на который я должен обратить внимание.
UPDATE
Это может быть гораздо более серьезной проблемой. У меня есть два NSManagedObjectContexts, один в том же потоке, а другой в другом. Когда я синхронизирую эти контексты, может происходить много обновлений пользовательского интерфейса (особенно табличных представлений). Я хочу знать, нужно ли мне принимать какие-либо специальные меры, чтобы убедиться, что синхронизация автоматически запускает все это в главном потоке, или мне нужно что-то сделать, чтобы это произошло таким образом? (Возможно, мне придется написать еще один вопрос по этому вопросу.)