我有一个从 XIB 文件定义的 UItableViewCell 。这个单元格包含一个 UIScrollView,它使用 UIView 对象 - viewXY - 动态填充。我在代码中的任何地方都使用 arc。用户界面看起来像:
单元格 0:[view00 view01 view02 ...]
单元格 1:[view10 view11 view12 ...]
等等...,其中 [ ] 是单元格内容,可以水平滚动。
问题:我分析了应用程序,当我垂直向下滚动时,内存占用量迅速增长,据我所知,从未恢复正常,也没有达到平稳状态。更重要的是,如果我向下滚动几个单元格然后再向上滚动,内存也会增加......
我用仪器工具检查了泄漏,没有。
我围绕创建 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 标签....如果我替换说
UIImageView *viewXY = [UIImageView alloc] initWithImage:[blablabla]]
[scrollView addSubview:viewXY];
一切都很好。仪器中的Live Bytes迅速达到平台期。
作为测试的一部分,我加载 NIB 文件而不执行其自定义类中定义的任何方法,因此它带有 IB 中定义的 IBOutlets(默认标签文本、图像等)。
这东西快把我逼疯了。
非常欢迎提出理解我做错了什么的建议。