2015-06-27 46 views
0

大家好! 我现在使用Xcode 6.2开发Objective-C,当我尝试使用“工具”来检测内存问题时,它只是不工作,因为我看书或blogs.I使用代码打击来测试(主要功能是省略,使用默认的xcode &乐器设置)。Xcode 6.2仪器内存泄漏检测问题

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属性。 这是一个奇怪的现象。 当我设置我< 1,“仪器”捕获任何东西,当我(或更大),它可以检测到泄漏的内存问题!但泄露的对象数是2(或2 *倍-2)!这就是奇!任何人都知道发生了什么?我犯了什么错误吗? TKS! 这里是图片&日志: 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> 

enter image description here

我< 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> 

enter image description here

回答

0

如果obj0含有的强引用OBJ1,并OBJ1还含有强引用obj0,你已经创建了一个保留周期,其中没有一个对象可以被释放。

这将泄漏每个对象的内存,通过循环进行每次迭代。 (这就是为什么它的迭代次数是2次-1)。

要解决这个问题,可以将obj属性设置为弱,以便在迭代结束时每个对象都可以不存在。