2011-10-07 30 views
6

我試圖執行主線程上這個動作:performSelectorOnMainThread多參數

[curItem.mButton setBackgroundImage:newArt forState:UIControlStateNormal]; 

所以我做到這一點...

cWrapperObject* obj = [cWrapperObject alloc]; 
[obj setupParams :curItem.mButton :newArt]; 
[obj performSelectorOnMainThread:@selector(setImageForButton) withObject:nil waitUntilDone:YES]; 

我覺得這是不好的,沒有任何人有關於我如何才能以不同的方式提出任何建議?

回答

13

另一種選擇是GCD。您可以在運行循環運行時在主隊列上調用連續運行的塊。塊不限於像performSelectorOnMainThread這樣的一個對象。

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

我寫的performSelectorXXX和GCD在這裏完成的樣品更全面的比較:

GCD, Threads, Program Flow and UI Updating

而且,這裏的另一個相關的SO職位:

GCD to perform task in main thread

4

如果您只需要傳遞一個參數,你應該在方法中設置「withObject:」參數。所以,你的方法應該被聲明爲

-(void)setImageForButton:(id)parameter 

,你應該在主線程中調用方法與:

[obj performSelectorOnMainThread:@selector(setImageForButton:) withObject:newArt waitUntilDone:YES]; 

注「:」在@selector(setImageForButton:)這意味着,此方法將一個參數傳遞消息,傳遞在withObject:

相關問題