2012-02-21 54 views
2

我不清楚使用UI對象的程度不安全。我有一些代碼,我剛剛移動到另一個隊列(使用NSOperation和NSOperationQueue)。我檢討,我需要清理非安全的代碼,跑翻過這一點:在後臺線程上實例化UI對象是否安全?

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,一個在主線程中,另一個在另一個線程中。當我同步這些上下文時,會發生很多UI更新(尤其是表視圖)。我想知道是否需要採取任何特殊措施來確保同步在主線程上自動啓用此功能,還是必須執行某些操作才能使其發生這種情況? (我可能需要在此寫另一個問題。)

回答

1

第二行在主線程之外肯定是不安全的。 alloc本身可能在輔助線程上可以,但我不知道init...方法是否可行,並且謹慎的假設是它不安全。

您應該在主線程上安排您的所有UI更新。如果您想將它們排列爲NSOperation對象,則可以使用[NSOperationQueue mainQueue]

+1

我想我會使用dispatch_async(dispatch_get_main_queue(),^ {...})來照顧這些塊。 – Jim 2012-02-21 20:08:09

相關問題