0

我有一个从 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(默认标签文本、图像等)。

这东西快把我逼疯了。

非常欢迎提出理解我做错了什么的建议。

4

3 回答 3

1

In your ViewController's viewDidLoad you should have something like this:

 [yourTable registerNib:[UINib nibWithNibName:@"yourUITableViewCellNibName" bundle:nil]
 forCellReuseIdentifier:@"reuseIdentifier"];

and in your table datasource method(cellForRowAtIndexPath) you should have the following:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     MyCustomCell* cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
     //Set your cell's values.

return cell;
}
于 2013-02-24T00:57:53.883 回答
0
[scrollView addSubview:viewXY];

有你的问题。您正在向滚动视图添加一些内容,并且永远不要删除它。

从事情的声音来看,您没有正确使用 UITableView 。你应该有一个视图控制器,它实现了 UITableViewDelegate 和 UITableViewDataSource 协议中的方法,并使用它们来用数据填充表格。您永远不会直接向表格添加任何内容,您只会在它请求时向其提供单元格。

于 2013-02-24T04:39:27.260 回答
0

我不确定这是否与内存使用有关,但文档建议UINib用于此用例:

UINib每当需要重复实例化相同的 nib 数据时,您的应用程序都应该使用对象。

另一种可能是myDisplay. 它是否有任何strong应有的属性weak

于 2013-02-24T00:22:22.060 回答