我在多次发布 View 时遇到问题。虽然理论上很简单,因为我将 uiview 移动到 uiview,它是 uiview 的子类并且是动画的等等,这不是我可以轻易修复的。它只有 10% 崩溃,并且仅在某些条件下崩溃,即使在这些条件下也只有 30% 的时间崩溃。
换句话说,它有点复杂。有时在我的 dealloc 方法中,此 UIView 的保留计数已经为 1(在释放 View 时被释放),因此不应再次释放。所以我所做的是:
if ([mainView retainCount] > 1) {
NSLog(@"released");
[mainView release];
}
Consistant with the crashes released 通常被调用,但并非总是如此,而且它经常发生在我有时希望它崩溃的时候。我已经用这段代码检查过泄漏,它从来没有泄漏过。
现在真正的问题是……由于保留计数而发布某些东西是错误的吗?我已经尝试了很多不同的方法来解决这个问题,到目前为止,这是唯一可靠且不会泄漏的方法。
编辑:如果不是,那么将一个 UIView 复制到另一个 UIView 的更好方法是什么?
mainView = newView;
[newView release];
我试过先释放 mainView,然后在 newView 上调用 copy,但这会崩溃。上面的代码也很完美,除了保留计数有时比预期的低 1,即使它从未在代码中的任何其他地方发布。
最佳答案
不要使用 retainCount 值。
说真的,你不应该永远将那个值用于任何像这样真正有用的东西。
如果您有内存泄漏,或由于过度释放而遇到崩溃,请修复它们 - 它们是错误!这不是处理它们的方法。
编辑:总是一本好书:Memory Management Guide
关于ios - 由于保留计数而释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912307/