由于保留计数而释放对象

Rud*_*ger 0 memory-management uiview ios retaincount

我有一个问题,即发布视图的次数太多了.虽然理论上很简单,因为我将uiview移动到uiview,这是uiview的一个子类,并且是动画的,所以它不是我可以轻松修复的东西.它只会在一定条件下崩溃10%,即使在这些条件下也只有30%的时间.

换句话说,它有点复杂.有时在我的dealloc方法中,此UIView的保留计数已经为1(在视图发布时会释放),因此不应再次释放.所以我做的是这样的:

if ([mainView retainCount] > 1) {
    NSLog(@"released");
    [mainView release];
}
Run Code Online (Sandbox Code Playgroud)

与发布的崩溃一致通常被称为,但并非总是如此,并且当我有时期望它崩溃时它几乎发生.我用这个代码检查了泄漏,它从不泄漏.

现在实际的问题......由于保留计数而释放一些东西是错误的吗?我已经尝试了许多不同的方法来解决这个问题,到目前为止,这是唯一可靠且无泄漏的方法.

编辑:如果没有,那么将一个UIView复制到另一个UIView的更好方法是什么?

mainView = newView;
[newView release];
Run Code Online (Sandbox Code Playgroud)

我尝试先释放mainView,然后在newView上调用copy,但这会崩溃.以上也很有效,除非保留计数有时比预期低1,即使它从未在代码中释放任何其他内容.

Eik*_*iko 5

不要使用retainCount值.

说真的,你永远不应该把这个值用于任何真正有用的东西.

如果您有内存泄漏,或因过度发布而崩溃,请修复它们 - 它们是错误!这不是处理它们的方法.

编辑:总是很好读:内存管理指南