【问题标题】:Instruments memory leaks detecting issue in Xcode 6.2Xcode 6.2 中的 Instruments 内存泄漏检测问题
【发布时间】:2015-09-14 03:55:26
【问题描述】:

大家! 我现在使用 Xcode 6.2 来开发objective-c,当我尝试使用“仪器”来检测内存问题时,它就像我看到书籍或博客一样不起作用。我使用代码打击来测试(省略了主要功能,使用默认的 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

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

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>

【问题讨论】:

    标签: objective-c xcode memory-leaks instruments


    【解决方案1】:

    如果 obj0 包含对 obj1 的强引用,并且 obj1 也包含对 obj0 的强引用,则您创建了一个保留循环,其中两个对象都不能被释放。

    对于每个对象,对于循环中的每次迭代,这都会泄漏内存。 (这正是为什么它是 2 x 迭代次数 - 1。)

    要解决这个问题,您可以将 obj 属性设置为 weak,这样每个对象都可以在迭代结束时消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 2013-11-14
      • 2011-08-02
      • 1970-01-01
      • 2011-06-28
      • 2010-10-09
      • 2012-01-05
      相关资源
      最近更新 更多