ARC卡在无限保留或释放循环中

时间:2013-03-04 19:34:36

标签: ios automatic-ref-counting

我有一个较旧的应用程序,我转换为使用ARC。原始版本没有内存泄漏,我使用调试器中的内存诊断修复了转换后的所有错误。有时,应用程序会崩溃,堆栈跟踪看起来像ARC一样陷入无限保留或释放周期,如下所示:

0   CoreFoundation                  0x329046a6 CFRelease + 46
1   CoreFoundation                  0x329046da CFRelease + 98
2   CoreFoundation                  0x329046da CFRelease + 98
3   CoreFoundation                  0x329046da CFRelease + 98
4   CoreFoundation                  0x329046da CFRelease + 98

不幸的是,堆栈跟踪切断了512个条目,所以我看不到这个链的起始位置。 Apple表示,如果alloc和init方法是分开的,并且init方法返回的是与alloc不同的对象,则可能会发生这种情况。我检查了所有分配,并遵循推荐的格式:

Class *var = [[Class alloc] initMethod:arg];

有没有人见过这种无限循环?我在使用Xcode调试器时无法捕获它,并且它非常不一致。由于ARC正在注入保留和释放,我不知道崩溃的起源。

0 个答案:

没有答案