【问题标题】:Zombie Messaged In For Loop僵尸消息在 For 循环中
【发布时间】:2011-04-15 07:13:27
【问题描述】:

我有一个 ivar,keys,它是一个包含 50 个字符串的 NSMutableArray。当我的视图加载时,我在 Instruments 中收到一个僵尸消息错误,它正在将我引导到这行代码:

for (int row = 0; row < r; row++) {
    for (int column = 0; column < c; column++){
        otherArray[column][row] = [[[keys objectAtIndex:0] retain] autorelease]; 
                                //^ Instruments brings me here
        [keys removeObjectAtIndex:0];
    }
}

我保留了该值以使其保持活动状态,以便remove 不会导致崩溃,但它仍然会。我试过不保留和自动释放,但它仍然崩溃。当我有一个局部变量而不是 ivar 时,这种保留和自动释放的方法有效......

我需要一个 ivar,因为我需要访问其他地方的字符串。

谢谢

【问题讨论】:

    标签: iphone ios4 exc-bad-access nszombie


    【解决方案1】:

    合成它并在你的 dealloc 中释放它。

    【讨论】:

    • 那么您不必自动释放或保留它,请确保它已初始化,因为如果 Instruments 将您带到那行代码,问题不在于删除,而在于自动释放,保留,或 objectAtIndex
    • 我已经取出自动释放/保留,但它仍然向僵尸发送消息,我不确定我错过了什么。它在循环之前被初始化,我可以打印出每个项目。我的流程应该是这样的:遍历数组中的前 20 个元素,然后删除它们。下次调用该方法时(视图控制器的新实例),循环接下来的 20 个,删除它们,依此类推...
    【解决方案2】:

    已解决 -- 内存管理问题 - 未正确保留密钥。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      相关资源
      最近更新 更多