我多次发布视图时遇到问题。尽管从理论上讲很简单,因为我将uiview移至uiview,这是uiview的子类并具有动画效果,所以我无法轻易对其进行修复。它仅在特定条件下崩溃10%,即使在这些条件下也仅崩溃30%的时间。
换句话说,它有点复杂。有时在我的dealloc方法中,此UIView的保留计数已经为1(在释放视图时将被释放),因此不应再次释放。所以我要做的是:
if ([mainView retainCount] > 1) {
NSLog(@"released");
[mainView release];
}
通常会调用与已发布的崩溃一致的信息,但并非总是如此,当我有时希望它崩溃时,它会发生很多。我已经使用此代码检查了泄漏,但从未泄漏。
现在是实际的问题...由于保留计数而释放某些东西是否错误?我尝试了多种方法来解决此问题,到目前为止,这是唯一可靠且不泄漏的方法。
编辑:如果没有,那么将一个UIView复制到另一个UIView的更好方法是什么?
mainView = newView;
[newView release];
我尝试过先释放mainView,然后在newView上调用copy,但这会崩溃。除了保留计数有时比预期低1(即使从未在代码中以其他任何方式释放)之外,以上代码也可以正常工作。
最佳答案
不要使用keepCount值。
认真地说,您永远不要将这个值用于任何真正有用的事情。
如果您有内存泄漏,或由于版本过多而崩溃,请修复它们-它们是bug!这不是处理它们的方法。
编辑:总是好的阅读:Memory Management Guide