2011-12-03 31 views
0

在查看对象调用removeFromSuperview时碰到的问题。所述分配历史(根据仪器)如下:目标C的方法被发送到解除分配对象

MyView的的alloc - > MyView的1

addSubview:MyView的 - > MyView的2

MyView的释放 - > MyView的1

MyView的removeFromSuperview - > MyView的0

MyView的的dealloc - > MyView的-1(由removeFromSuperview调用)

我明白因为引用计数达到0,所以调用dealloc方法。但是,我不明白为什么它将引用计数减1,导致消息被发送到释放方法。

此外,我只能使用仪器检测它。使用Xcode它不会崩溃。

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

+0

你手动调用最后'MyView的dealloc',或者它被'removeFromSuperview'调用? – Paul

+0

正被removeFromSuperview调用。 –

+0

您是否尝试过您的应用程序,而不先释放myView,因此它的计数仍然是2?我认为'removeFromSuperview'会自动处理额外的'alloc'。 – Paul

回答

1

另一种非常简单的方法找到引用计数问题和Xcode是使用分析,编译器现在是足够聪明,实现自动引用计数,所以它也足够聪明,找到引用计数问题。

+1

+1 heh,是啊,那也是=)我以为明显已经完成了。 – justin

0

理清这个问题了最简单的方法通常是:

  • 运行的程序在仪器使用引用计数记录启用
  • 重现该问题
  • 执行将停止
  • 那么你分析引用计数的历史,并找到不当递减史上

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

相关问题