大家好! 我现在正在使用Xcode 6.2开发objective-c,当我尝试使用“Instruments”来检测内存问题时,它只是不起作用,因为我看到书籍或博客。我使用代码打击测试(主要功能被省略,使用默认的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&lt; 1时,“Instruments”没有捕获任何内容,当i&lt; 2(或更大)时,它可以通过Leaks检测到内存问题!但是泄漏的物体数量是2(或2 *乘以2)!这就是ODD!谁知道发生了什么?我犯了什么错误吗? TKS! 这是图片&amp;日志: i&lt; 2,并且“Instruments”检测到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&lt; 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>
答案 0 :(得分:0)
如果obj0包含对obj1的强引用,并且obj1也包含对obj0的强引用,那么您已经创建了一个保留周期,其中两个对象都不能被释放。
对于每个对象,这将通过循环每次迭代泄漏内存。 (这就是为什么它的2倍迭代次数 - 1。)
要解决这个问题,你可以将obj属性设置为weak,这样每个对象在迭代结束时都可能不存在。