首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Objective-C上的释放对象尚未释放

Objective-C上的释放对象尚未释放
EN

Stack Overflow用户
提问于 2012-02-13 23:42:26
回答 3查看 76关注 0票数 1

我正在尝试创建一个方法来释放我由于任何原因还没有释放的对象。我将这个添加到我的ViewController的dealloc方法中:

代码语言:javascript
运行
复制
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] ;
        }
    }
}

不幸的是,应用程序崩溃了。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-13 23:45:06

我做错了什么?

你没有平衡你的保留和释放。在您的示例中,您永远不需要这样的代码。如果你保留了一些东西,当你用完它时就释放它。其他任何事情都是在自找麻烦。

特别是在这段代码中,您将释放视图的所有子视图。您的代码是否保留了所有这些视图?如果不是,你就不应该释放它们。若有,原因为何?你对每一个都有单独的引用吗?您的视图将保留您作为子视图添加的任何视图;只有当您有其他对它们的引用时才需要保留它们(有些人甚至选择不保留它们)。

票数 4
EN

Stack Overflow用户

发布于 2012-02-13 23:45:45

您释放的对象可能已经释放,并且仅由将其作为子视图保留的视图保留。由于您的版本不会将视图从其superview中删除,因此在视图层次结构中最终会出现一个死对象。当视图被释放或重新绘制其所有子视图时,这将崩溃。

票数 1
EN

Stack Overflow用户

发布于 2012-02-13 23:48:27

对于视图,大多数情况下,您必须首先从superview中删除视图,否则您将释放superview仍然需要或保留引用的对象。

你不应该这样做,你应该在保留和释放之间取得良好的平衡。

作为额外的,这是我真的不知道的:使用malloc_size正确吗

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9263343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档