iphone - dealloc 从哪里开始?

标签 iphone objective-c

我收到错误消息“[myObject 方法]:消息已发送到已释放的实例 0xbc05440”。这一定是因为我释放了我仍然需要的东西。

我四处寻找合适的 nils、版本等,但我找不到我在哪里发布这个对象。

然后我在 myObject 的 dealloc 中放置了一个中断。这捕获了 dealloc,但堆栈仅显示汇编代码。如果我离开这个地方,我不会得到任何提示。我如何找到 dealloc 开始的位置?

最佳答案

您的问题可能怀疑是自动释放 变量。它们是偷偷摸摸的,会在您没有明确释放它们的情况下被释放。因此请确保您没有使用自动释放的变量并期望它会一直存在。

至于你的具体问题,你其实并不关心dealloc的调用栈。 dealloc 永远不会在您释放某些东西时正确调用。对象的实际释放是由应用的正常运行循环上下文之外的运行时处理的,因此查看此时的调用堆栈绝对不会告诉您任何信息。

您真正关心的是发布。如果您想知道您的对象何时被释放,您可以覆盖感兴趣的对象中的释放,并简单地直接调用 super 的实现。然后你可以在那里设置一个断点来查看释放时的当前调用堆栈。为清楚起见,它看起来像这样:

- (oneway void)release {
    [super release]; // Put a breakpoint here.
}

需要注意的一点:您可能会看到比预期更多的版本。这是因为系统会非常频繁地在内部保留和发布类,因此在确定哪些发布实际上值得注意时,您需要谨慎行事。这种方法只是一个粗略的工具。 NSZombies对于追踪过度释放的对象也非常有用。

关于iphone - dealloc 从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181559/

相关文章:

ios - 如果某个应用程序仅适用于iPhone,那么iPad从何处提取1x/2x版本?

iphone - 对 NSMutableArray 进行排序

iphone - 如何在 ios6 iphone 应用程序中创建使用 Facebook 或 twitter 登录

iPhone,在变暗 View 中捕获所有触摸事件

objective-c - self.window.rootViewController = self.someController 不工作?

ios - CLLocationManager 无法获取用户在设备中的位置,但无法在模拟器中获取

objective-c - 如何使用 NSHost 获取外部 IP 地址?

iphone - 我的应用程序的可读性

iphone - 先做逻辑,后做外观,在 iOS 开发中是否运作良好?

ios - 当我们点击 UIbutton 时,如何更改 TableList UILabel backGround Color?