我有一个较旧的应用程序,我转换为使用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正在注入保留和释放,我不知道崩溃的起源。