我不清楚使用 UI 对象到什么程度是不安全的。我有一些代码刚刚移至另一个队列(使用 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];
这两行在主线程之外都不安全吗?我确实有一些崩溃行为,这看起来是我应该考虑进行的第一种重构。
更新 这可能是一个更广泛的担忧。我有两个 NSManagedObjectContext,一个在主线程中,一个在另一个线程中。当我同步这些上下文时,可能会发生大量 UI 更新(特别是 TableView )。我想知道是否需要采取任何特殊措施来确保同步在主线程上自动启动所有这一切,或者我是否必须采取一些措施才能实现这种情况? (我可能需要就此写另一个问题。)
最佳答案
第二行在主线程之外肯定是不安全的。 alloc 本身在辅助线程上可能没问题,但我不知道 init... 方法是否可以,谨慎的假设是它不安全。
您应该在主线程上安排所有 UI 更新。如果您想将它们安排为 NSOperation
对象,可以使用 [NSOperationQueue mainQueue]
。
关于multithreading - 在后台线程上实例化 UI 对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383580/