0

我正在输出调试日志,我想知道我的代码中的特定方法是否在当前的 runloop 和后续的 runloop 中执行。有没有办法做到这一点?

例如,最简单意义上的运行循环:

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 上运行的任何方法,此测试将失败(runloops 属于线程,并且每个线程都存在一个。)

如果您需要确定某段代码是否在特定运行循环上肯定运行,您可以将有问题的运行循环引用缓存在您知道它将运行的地方:

-(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 回答