我收到零星的EXC_BAD_ACCESS崩溃,我想这与多线程问题有关。 (我试图用僵尸进行分析,但在分析时应用程序不会崩溃)。所以我想知道是否有任何种类的机制,用于调试目的,以确定一个对象是否被多个线程同时访问?如果是这种情况,可能以某种方式打印日志语句?确定一个对象是否被多个线程访问?
回答
,如果你是在一个线程中执行的唯一一个将依靠无人防守的静态变量告诉一个简单的和肮脏的方法:
-(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;
}
那么请等待这个工作到底如何?我遇到了麻烦。 – Snowman 2012-07-17 18:46:52
因此,如果runningThread!= myThread,这是否意味着两个不同的线程试图同时访问同一个对象? – Snowman 2012-07-17 18:51:36
@mohabitar当一个线程进入你的方法时,它会检查'runningThread'变量(它是'static',因此在所有线程之间共享)为'nil'。如果是,则该线程将其设置为其自己的ID;如果不是,则其他一些线程必须将其设置为不同的ID。线程无论如何都会覆盖ID,然后继续执行有用的操作。之后,它会检查其ID是否被覆盖,最后将静态恢复为“nil”。 – dasblinkenlight 2012-07-17 18:51:42
- 1. 锁定一个对象被多个线程访问 - Objective-C
- 2. 多线程访问多个对象
- 3. Java:保护一个对象不被多线程访问
- 4. 是否可以确定一个对象是否被另一个对象引用?
- 5. 被多个线程访问
- 6. 是否可以确定通过哪个对象访问对象?
- 7. 是否有访问一个空对象
- 8. 如何控制多个线程对一组对象的访问?
- 9. 对象只被多个线程读取,是否需要同步
- 10. 确定一个访问复选框是否被选中或不
- 11. 当被Delphi对象调用时,一个DLL是否必须是多线程的?
- 12. 确定一个对象是否是一个ctypes数组
- 13. 确定一个对象是否是一个PHPUnit模拟
- 14. 如何确定一个Thread对象是否是.NET中的当前线程?
- 15. 访问从一个线程请求对象一个servlet
- 16. 从另一个线程访问一个对象
- 17. 确定3D对象是否被另一3D对象隐藏
- 18. 在主线程被另一个线程写入并且线程被加入后访问变量是否安全?
- 19. 如何确定一个表是否在上个月被访问过?
- 20. 确定线程是否被阻塞
- 21. 确定两个对象是否相等
- 22. 确定整形点是否在一个线串/多线串
- 23. 一个线程如何确定另一个线程是否已经崩溃?
- 24. 我应该从多个线程访问(不更改)一个对象吗?
- 25. 有没有办法让一个对象只能被访问特定方法的第一个线程使用?
- 26. 实例化一个新对象。不确定这是否正确?
- 27. 确定是否一个Javascript对象是一个“复杂”的对象或只是一个字符串
- 28. 确定一个dll是否被应用程序中的多个线程调用 - 使用ThreadId?
- 29. Java线程访问对象
- 30. Java线程访问对象
更可能发生的情况是,你只是访问已物体被释放。这通常是'EXC_BAD_ACCESS'的结果。这也与未启用僵尸崩溃一致。你正试图访问一个'nil'对象。 – 2012-07-17 17:58:46
另外,这是一个更好的方法来防止***它,不检测它。 – CodaFi 2012-07-17 18:03:43
首先我想看看我的假设是否正确,因为我不确定问题是什么。但看到编辑,我认为这可能与绘图有关。 – Snowman 2012-07-17 18:07:38