【问题标题】:Object leak after adding a subview添加子视图后对象泄漏
【发布时间】:2011-05-12 17:59:59
【问题描述】:

各位开发者,

我正在尝试将 Web 图像设置为 UIButton 的背景。一切正常,除了当我构建和分析它显示 aImage 仍然有 +1 参考。在 addSubview 之后为 aImage 添加一个版本并不能解决它。我想我可以通过子类化和编写自定义 dealloc 来解决它,但这感觉就像一个复杂的解决方案。有没有人有什么建议?谢谢 !

UIImage *aImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:mUrl]];
[myOverviewButton setBackgroundImage:aImage forState:UIControlStateNormal];
[aView addSubview:myOverviewButton];

【问题讨论】:

    标签: objective-c cocoa-touch ipad memory-leaks


    【解决方案1】:

    要么向 aImage 添加自动释放,要么手动调用释放。

    UIImage *aImage = [[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:mUrl]] autorelease];
    

    当您调用 setBackgroundImage: 时,该按钮正在对图像执行保留。当您执行 alloc/init 时,您执行了一个从未释放的保留。

    【讨论】:

      【解决方案2】:

      一旦您显示的代码执行完毕,aImage 的引用计数应该为 2:一个来自 alloc 调用,一个来自 setBackgroundImage:forState: 调用。您应该在 setBackgroundImage:forState: 之后释放以平衡 alloc,但您的引用计数仍然为 1。这是预期的 - 否则 myOverviewButton 将无法使用图像。当myOverviewButton 解除分配时,它应该下降到 0。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 2015-03-08
        • 2011-04-16
        相关资源
        最近更新 更多