【问题标题】: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。