【发布时间】:2013-02-09 09:19:23
【问题描述】:
我有一个从 XIB 文件定义的 UItableViewCell。这个单元格包含一个 UIScrollView,它使用 UIView 对象 - viewXY - 动态填充。我在代码中的任何地方都使用 arc。用户界面如下所示:
单元格 0:[view00 view01 view02 ...]
单元格 1:[view10 view11 view12 ...]
etc...,其中 [ ] 是单元格内容,可以水平滚动。
问题:我分析了应用程序,当我垂直滚动向下 时,内存占用量迅速增长,据我所知,它永远不会恢复正常,也不会达到平稳状态。更重要的是,如果我向下滚动几个单元格然后再向上滚动,内存也会增加......
我用仪器工具检查了泄漏,没有。
我围绕创建 viewXY 的代码部分缩小了问题的范围。如果我使用:
myDisplay* viewXY;//myDisplay is a UIView subclass
-->viewXY = [[NSBundle mainBundle] loadNibNamed:AW_UI_VE owner:self options:nil][0];
[scrollView addSubview:viewXY];
当我翻阅单元格时,记忆变得失控。 NIB 是一个简单的 UIView+UIImageView+2 Labels.... 如果我替换说
UIImageView *viewXY = [UIImageView alloc] initWithImage:[blablabla]]
[scrollView addSubview:viewXY];
一切都很好。仪器中的 Live Bytes 迅速达到稳定水平。
作为测试的一部分,我加载 NIB 文件而不执行其自定义类中定义的任何方法,因此它带有 IB 中定义的 IBOutlets(默认标签文本、图像等)。
这东西快把我逼疯了。
欢迎提出建议以了解我做错了什么。
【问题讨论】:
-
只需检查 XCode 中的方案选项(产品 > 方案 > 编辑方案 > 运行 > 诊断选项卡)并确保您未选中
Enable Zombie Objects(NSZombieEnabled)。