活对象是垃圾收集?

时间:2010-11-15 07:24:40

标签: objective-c cocoa garbage-collection

我在Mac OS X上的基于Cocoa的应用程序中使用垃圾收集器。它运行了100个线程,并使用Operation Queue完成同步。

长时间运行后,其中一个对象被盗,应用程序将崩溃。

检查对象是否为非nil也会失败,因为该对象无效并包含一些垃圾值。在对象上调用方法会导致崩溃。

任何人都可以帮我调试这个问题。

谢谢......................

2 个答案:

答案 0 :(得分:2)

  

我正在使用垃圾收集器   Mac OS X上基于Cocoa的应用程序。   它有100个线程运行和   使用完成同步   操作队列。

更有可能的是,错误在于代码看似过于并发的性质。在具有“仅”两位数内核(如果这样)的机器上运行100个线程不太可能非常有效,当然,保持所有内容正确同步将是相当困难的。

最好的起点是打开Malloc堆栈日志记录并使用malloc_history找出南方地址发生的事件。

此外,10.6.5中的修复程序影响了GC的正确性。

答案 1 :(得分:0)

如果你可以改变垃圾收集对象的代码,那么覆盖这样的finalize方法,以获得一些信息:

- (void) finalize
{
    NSLog(@"Finalizing!\n%@", [[NSThread callStackSymbols] componentsJoinedByString:@"\n"]);
    //if you put here a breakpoint, you can check the supposed references to this object
    [super finalize];
}