4

我遇到了零星的 EXC_BAD_ACCESS 崩溃,我认为这与多线程问题有关。(我尝试使用 Zombies 进行分析,但分析时应用程序不会崩溃)。所以我想知道是否有任何一种机制,用于调试目的,以确定一个对象是否同时被多个线程访问?如果是这种情况,也许会以某种方式打印日志语句?

4

1 回答 1

5

判断您是否是唯一在线程上执行的人的简单而肮脏的方法将依赖于不受保护的静态变量:

-(void)concurrentMethod {
    static NSThread *runningThread = nil;
    NSThread *myThread = [NSThread currentThread];
    if (runningThread != nil) {
        NSLog(@"Thread %@: running concurrently with %@", runningThread, myThread);
    }
    runningThread = myThread;

    ... // Do the useful stuff here

    if (runningThread != myThread) {
        NSLog(@"Thread %@: pre-empted by %@", myThread, runningThread);
    }
    runningThread = nil;
}
于 2012-07-17T18:42:28.317 回答