【问题标题】:Zombie in mixed ARC code混合 ARC 代码中的僵尸
【发布时间】:2012-03-18 18:22:52
【问题描述】:

我在启用 ARC 的应用中使用了非 ARC 框架。现在我得到一个奇怪的EXC_BAD_ACCESS,看起来像这样:

return [super prepareURLRequest];  << Thread 1: Program received signal: "EXC_BAD_ACCESS".

首先,这怎么可能,因为super 不是一个可能被释放的对象。 更新:虽然 Debugger 卡在这一行,但事实证明问题在上述方法中更深一层。

当我在 Zombie mode 中运行该东西时,我得到以下“僵尸堆栈”:

Event Type    RefCt     Responsible Caller
Malloc            1     -[MyViewController loadData:]
Retain            2     -[MyDataManager initWithBaseURL:]
Release           1     -[MyDataManager initWithBaseURL:]
Release           0     -[MyViewController loadData:]
Zombie           -1     -[RKRequest prepareURLReuqest]

似乎 url 有问题,但在 ARC 中,我无法保留 URL,因此它不会被分配。那么我该如何解决这个问题。

【问题讨论】:

  • 你说的“超级不是一个实际的对象”是什么意思?
  • 那么 super 是一个对象吗?是不是代表超类(但实际上并没有实例化),还是我错了。
  • 你错了;你为什么这么认为?
  • super 和 self 是同一个对象。不同之处在于发送消息的方式(obj_msgSendSuper 而不是obj_msgSend)。
  • 感谢您的澄清,我会相应地更新我的答案。

标签: iphone objective-c memory-management automatic-ref-counting nszombie


【解决方案1】:

好的,我发现了问题。问题是MyDataManagerloadData: 方法通过后被释放。

所以我在MyViewController 中添加了一个myDataManager 属性,问题就消失了。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多