2012-02-03 16 views
0

我在iOS上有奇怪的線程問題。考慮這樣一個簡單的方法:iOS上使用「performSelectorOnMainThread」的上下文切換

- (BOOL)doSomething 
{ 
    [self doA]; 
    [self doB]; 
} 

此方法應該只運行在主線程的上下文。我需要從一個工作線程調用這個方法。爲此我使用performSelectorOnMainThread

如果我按照這裏所說的完成一切工作。上下文切換髮生在doA`doB之間嗎?

(我不這麼認爲,我只是想確保我的理解是正確這裏)

回答

1

通過「上下文切換」我想你指的是主線程切換到其他一些主線程的事件(如你可以隨時切換到另一個工作線程)。

但是,在執行其他任何操作之前,主線程將完成所有doSomething。從performSelectorOnMainThread

摘錄:

此方法隊列使用共同運行循環的主線程 的運行循環的消息模式,也就是說,與 NSRunLoopCommonModes常數相關聯的模式。 作爲其正常運行循環 處理的一部分,主線程使消息出隊(假設它在 運行於其中一種常用運行循環模式中)並且調用期望的方法 。從同一線程對此方法的多次調用導致 相應的選擇器排隊,並以相同的 調用順序執行。