奇怪的内存错误dealloc / release

时间:2011-09-20 13:21:59

标签: ios objective-c memory-management

我的iPhone Objective-C程序遇到了一个奇怪的错误。这是发生的事情:

  • 我收到了EXC_BAD_ACCESS崩溃。
  • 好吧,僵尸开始了,日志告诉我这是关于一个获得释放的CFNumber,但已经解除分配。仍然没有坚韧的饼干。
  • 我一直在调试,直到遇到两个NSNumber的块。我的代码中没有CFNumbers,所以我认为是这些行。
  • 我尝试保留它们,没有成功,甚至用零填充它们,用新值覆盖它们等等。仍然没有。
  • 我评论出来了。现在日志一直在讨论相同的CFNumber,但现在正在发送一个“doubleValue”(而不是“release”),而它已经被释放了。我的代码中没有“doubleValue”。

这里发生了什么?僵尸是不是搞乱了我的代码?我在这里走到了尽头。非常感谢任何帮助。

亲切的问候,

雷因德

2 个答案:

答案 0 :(得分:0)

可悲的是,没有代码,我们无能为力。

以下是一些需要注意的一般原则,并会让您的生活更轻松。

您指的是当前的课程。

  • 如果您需要长时间使用,请保留它。
  • 如果你在函数结束时不需要它,不要保留它(alloc,然后在最后释放)如果你没有保留它,不要释放它。
  • 如果您没有分配它,请不要释放它。
  • 如果你要返回一个你分配的对象,因而将失去对它的控制,自动释放(几乎就是它的设计目的)。这符合原则3和4,因为这意味着调用类需要做出保留或释放它的决定。

希望这可以帮助您查明问题。

答案 1 :(得分:0)

您不需要手动释放由便捷构造函数创建的任何对象,请参阅更多信息 convenience constructors