ios - 由于保留计数而释放对象

标签 ios memory-management uiview retaincount

我在多次发布 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/

相关文章:

ios - 当涉及数组值时,如何在 iOS 上正确形成 POST NSUrlRequest 的 requestString?

c++ - 如何调用删除的 nothrow 版本?

objective-c - __block 在 ARC 中的 ivar block 中的自引用循环

ios - 无法按下具有拐角半径的 UIView 下方的 UIButton

ios - CAEmitterLayer如何短时间重复发射

ios - iCarousel – 使所有项目都可选择,而不仅仅是居中的一个

ios - 有没有办法故意关闭 UIView 的所有抗锯齿?

ios - 如何合并为 armv7 和 i386 构建的两个 .a 文件?

C++返回 vector ,无法弄清楚出了什么问题

ios - 在 UITabbarController 中为所有 View Controller 添加一个公共(public) View