我正在尝试创建一个方法来释放我由于任何原因还没有释放的对象。我将这个添加到我的ViewController的dealloc方法中:
for (id object in [self.view subviews]){
NSLog(@"/n") ;
NSLog(@"%@", object) ;
if([object isKindOfClass:[UIView class]]){
if (malloc_size(object)>0) {
NSLog(@"-> Releasing object with size: %zd", malloc_size(object)) ;
[object release] ;
}
}
}
不幸的是,应用程序崩溃了。我做错了什么?
发布于 2012-02-13 15:45:06
我做错了什么?
你没有平衡你的保留和释放。在您的示例中,您永远不需要这样的代码。如果你保留了一些东西,当你用完它时就释放它。其他任何事情都是在自找麻烦。
特别是在这段代码中,您将释放视图的所有子视图。您的代码是否保留了所有这些视图?如果不是,你就不应该释放它们。若有,原因为何?你对每一个都有单独的引用吗?您的视图将保留您作为子视图添加的任何视图;只有当您有其他对它们的引用时才需要保留它们(有些人甚至选择不保留它们)。
发布于 2012-02-13 15:45:45
您释放的对象可能已经释放,并且仅由将其作为子视图保留的视图保留。由于您的版本不会将视图从其superview中删除,因此在视图层次结构中最终会出现一个死对象。当视图被释放或重新绘制其所有子视图时,这将崩溃。
发布于 2012-02-13 15:48:27
对于视图,大多数情况下,您必须首先从superview中删除视图,否则您将释放superview仍然需要或保留引用的对象。
你不应该这样做,你应该在保留和释放之间取得良好的平衡。
作为额外的,这是我真的不知道的:使用malloc_size
正确吗
https://stackoverflow.com/questions/9263343
复制