Multithreading 在后台线程上实例化UI对象安全吗?
我不清楚在多大程度上使用UI对象是不安全的。我有一些代码刚刚移动到另一个队列(使用NSOperation和NSOperationQueue)。我正在检查需要清理非安全代码的地方,并运行了以下操作:Multithreading 在后台线程上实例化UI对象安全吗?,multithreading,cocoa-touch,cocoa,Multithreading,Cocoa Touch,Cocoa,我不清楚在多大程度上使用UI对象是不安全的。我有一些代码刚刚移动到另一个队列(使用NSOperation和NSOperationQueue)。我正在检查需要清理非安全代码的地方,并运行了以下操作: alertNoDatabaseSelected = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"You Haven't Enabled Any Databases", nil) message:[NSString
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,一个在emain线程中,另一个在另一个线程中。当我同步这些上下文时,可能会发生很多UI更新(特别是表视图)。我想知道我是否需要采取任何特殊的措施来确保同步在主线程上自动启动,或者我必须做些什么来实现它?(我可能需要就此写另一个问题。)第二行在主线程之外肯定是不安全的。
alloc
本身在辅助线程上可能没有问题,但我不知道init…
方法是否正确,谨慎的假设是它不安全
您应该在主线程上安排所有UI更新。如果要将它们调度为
NSOperation
对象,可以使用[NSOperationQueue mainQueue]
。我想我将使用dispatch\u async(dispatch\u get\u main\u queue(),^{…})来处理这些块。