Objective C方法removeFromSuperview导致消息被发送到解除分配的对象

时间:2011-12-03 10:35:19

标签: objective-c memory-management dealloc

在View对象中调用removeFromSuperview时遇到问题。分配历史(根据工具)如下:

myView alloc - > myView 1

addSubview:myview - > myView 2

myView版本 - > myView 1

myView removeFromSuperview - > myView 0

myView dealloc - > myView -1(由removeFromSuperview调用)

我理解调用dealloc方法是因为引用计数达到0.但是,我不明白为什么它将引用计数减少一,导致消息被发送到deallocated方法。

另外,我只能使用乐器来检测它。使用xcode它不会崩溃。

非常感谢任何帮助。 非常感谢。

2 个答案:

答案 0 :(得分:1)

使用Xcode查找引用计数问题的另一个非常简单的方法是使用Analyze,编译器现在足够智能实现自动引用计数,因此它也足够聪明,可以找到引用计数的问题。

答案 1 :(得分:0)

解决此问题的最简单方法通常是:

  • 在启用了引用计数记录的工具中运行程序
  • 重现问题
  • 执行将暂停
  • 然后分析引用计数历史记录并在历史记录中找到不正确的减量

一旦掌握了它,定位僵尸大约需要2分钟。