0

デバッグ ログを出力しています。コード内の特定のメソッドが現在の実行ループと後続の実行ループで実行されているかどうかを知りたいです。これを達成する方法はありますか?

たとえば、最も単純な意味での実行ループ:

int i = 0;
while (1) {
  // process event queue
  // here I want to print a number 
  // that signifies n-th time I am processing the run loop
  NSLog(@"%d", i);
  i++;
}
4

2 に答える 2

0

この方法でメインの実行ループにいるかどうかを確認します。

if ([NSRunLoop currentRunLoop] == [NSRunLoop mainRunLoop]) {
    // ...
}

このテストは、バックグラウンドスレッドまたはrunloopで実行されているメソッドでは失敗します(runloopはスレッドに属し、スレッドごとに1つ存在します)。

コードの一部が特定の実行ループで確実に実行されているかどうかを判断する必要がある場合は、実行されることがわかっている場所に問題のrunloop参照をキャッシュします。

-(void)IKnowThisMethodRunsInASpecialRunLoop {
    _runLoopToWatch = [NSRunLoop currentRunLoop];
} 

// ... later ...

-(void)someMethod {
    if ([NSRunLoop currentRunLoop] == _runLoopToWatch ) {

    }
}
于 2013-02-21T20:14:33.203 に答える
0

各スレッドに名前を付ければ、クエリを実行できます。

NSThread *thread = [NSThread currentThread];
[thread name];
于 2013-02-21T16:33:37.580 に答える