【发布时间】:2011-12-03 10:35:18
【问题描述】:
在 View 对象中调用 removeFromSuperview 时遇到问题。分配历史(根据工具)如下:
myView 分配 -> myView 1
addSubview:myview -> myView 2
myView 发布 -> myView 1
myView removeFromSuperview -> myView 0
myView dealloc -> myView -1(由 removeFromSuperview 调用)
我知道调用dealloc方法是因为引用计数达到0。但是我不明白为什么它将引用计数减少1,导致消息被发送到deallocated方法。
另外,我只能使用仪器来检测它。使用 xcode 它不会崩溃。
任何帮助将不胜感激。 非常感谢。
【问题讨论】:
-
您是手动调用最后一个
myView dealloc还是由removeFromSuperview调用? -
正在被 removeFromSuperview 调用。
-
您是否在没有先发布 myView 的情况下尝试了您的应用,所以它的计数仍然是 2?我认为
removeFromSuperview会自动处理额外的alloc。 -
是的,但在那种情况下,我用仪器检查过,它泄漏了。计数保持在 +1
-
如果将顺序更改为
alloc、addSubview、removeFromSuperviewrelease,会发生什么?removeFromSuperview有可能是动态做释放部分的。
标签: objective-c memory-management dealloc