确定一个对象是否被多个线程访问?

时间:2012-07-17 17:45:25

标签: iphone objective-c ios cocoa

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

1 个答案:

答案 0 :(得分: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;
}