0

iOSで奇妙なスレッドの問題があります。このような単純な方法を考えてみましょう:"performSelectorOnMainThread"を使用してiOS上のコンテキストスイッチ

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

このメソッドべきメインスレッドのコンテキストでだけ実行。私はワーカースレッドからこのメソッドを呼び出す必要があります。私はこの目的のためにperformSelectorOnMainThreadを使用します。

私はここで説明したようにすべてを行います。コンテキストスイッチがdoA`doBの間で発生する可能性はありますか?

答えて

1

「コンテキストスイッチ」により、(私はちょうど私の理解が正しいここにあることを確認するには、そうは思わない)私はあなたのように(他のいくつかのメインスレッドのイベントへの切り替えメインスレッドを意味すると仮定しますいつでも別のワーカースレッドに切り替えることができます)。

しかし、メインスレッドは他の処理を行う前にdoSomethingをすべて終了します。 performSelectorOnMainThreadから

抜粋:

この方法は、一定 NSRunLoopCommonModesに関連付けられたモードであるモード共通実行ループを使用して、メインスレッド の実行ループにメッセージをキューイングします。 通常の実行ループ の処理の一部として、メインスレッドはメッセージをデキューし(一般的な実行ループモードのいずれかで実行中の と仮定して)、目的の メソッドを呼び出します。同じスレッドからこのメソッドを複数呼び出すと、 対応するセレクタがキューに入れられ、呼び出しが行われたのと同じ同じ順番で実行されます。