所有人!我现在使用Xcode 6.2来开发objective-c,当我尝试使用"Instruments“来检测内存问题时,它并不像我在书籍或博客上看到的那样工作。我使用代码blow来测试(main函数被省略,使用默认的xcode&instruments设置)。
for(int i=0; i<2; i++)
{
KSTestObj *obj0 = [[KSTestObj alloc] init];
KSTestObj *obj1 = [[KSTestObj alloc] init];
obj0.obj = obj1;
obj1.obj = obj0;
}
sleep(100);
KSTestObj类只有一个NSObject属性。这是一个奇怪的现象。当我设置i<1时,"Instruments“捕获不到任何东西,而当i<2(或更大)时,它可以通过泄漏检测到内存问题!但是泄漏的对象数量是2(或2*-2)!这很奇怪!有人知道发生了什么吗?我有没有做错什么?谢谢!这是图片和日志: i<2,和“仪器”检测到2个对象泄漏。
2015-06-27 14:33:19.108 ObjCPro_Test[50820:603] init success! 0x7ff968700c10
2015-06-27 14:33:19.109 ObjCPro_Test[50820:603] init success! 0x7ff968700c20
2015-06-27 14:33:19.109 ObjCPro_Test[50820:603] init success! 0x7ff9687003a0
2015-06-27 14:33:19.110 ObjCPro_Test[50820:603] init success! 0x7ff9687003b0
<End of Run>
i<1,“仪器”显示没有泄漏的对象!
2015-06-27 14:30:17.737 ObjCPro_Test[50789:603] init success! 0x7f7ff1e00830
2015-06-27 14:30:17.738 ObjCPro_Test[50789:603] init success! 0x7f7ff1e004e0
<End of Run>
发布于 2015-06-28 06:08:35
如果obj0包含对obj1的强引用,而obj1也包含对obj0的强引用,那么您已经创建了一个保留循环,在这个循环中,两个对象都不能被释放。
这将为循环中的每个对象和每次迭代泄漏内存。(这就是为什么它是2 x迭代次数-1的原因。)
要解决这个问题,可以将obj属性设置为弱,这样每个对象都可以在迭代结束时消失。
https://stackoverflow.com/questions/31085984
复制相似问题