iOS 需要可重用的 TableView Controller

标签 ios objective-c uitableview

ios 7.1

总结:当用户切换到新的 TableView Controller 时,系统分配了太多内存,这就是我需要某种可重用或单例 TableView Controller 的原因。


我有一个 TableView Controller (比如说垂直主页),它的单元格内部有内部 TableView (水平)。如果我不需要创建水平表,我可以创建一个表并操纵它的 cellForRowAtIndexPath 方法,而不是创建一个内部表。

无论如何,还有另一个功能;在最内部的单元格中有按钮,如果用户点击它,它会触发一个推送 segue,导航到另一个具有相同垂直和水平结构的 TableView Controller 。用户很可能会多次使用这些 TableView Controller 。

监控应用程序的内存使用情况时:

  1. 如果用户停留在主视图 Controller 并垂直滚动,系统会为每个具有内 TableView 的单元格多分配大约 1 MB。 1 mb 是可以接受的,即使它实际上已经很大了。顺便提一句。我正在使用可重复使用的单元格,以便能够通过这些代码行减少内存使用量:

    [tableView registerNib: customCellNib forCellReuseIdentifier:HorizontalContainerTableCellIdentifier];
    cell = (HorizontalContainerTableCell *) [tableView dequeueReusableCellWithIdentifier:HorizontalContainerTableCellIdentifier];
    
  2. 如果用户触发segue;创建了一个新的 TableView Controller as desribed as here.即使用户不滚动,系统也会为每个 TableView Controller 分配大约 5 MB。

这意味着为每个 segue 创建一个新的 View Controller 的成本太大了。我可以接受我的 View 层次结构不是轻量级的,但在第一个使用场景中可以看出,如果用户垂直滚动,系统会重新使用预先创建的单元格,并且内存成本不会那么高。

那么我应该走哪条路呢?我是否需要将 segues 子类化并将它们重定向到预初始化的 View Controller 并更新它的表(like this)?通过这种方式,我可以强制系统重用单元格。还是一切正常,一切都应该如此吗?

最佳答案

如果你segue viewController,旧的viewController将被插入导航堆栈,并且新的viewController将被创建并插入堆栈。我认为您可以通过在 viewWillDisappear 中释放 tableView 数据并在 viewWillAppear 上重新加载它们来减少使用。只需触发 reloadData 并在 numberOfRowsInSection 中返回 0 即可释放 tableView 使用的内存。

关于iOS 需要可重用的 TableView Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081407/

相关文章:

iOS Autolayout如何水平拉伸(stretch)2个按钮

c++ - C++ 中的 Objective C "autorelease"——控制对象生命周期的标准方法?

ios - 如何使用 Storyboard在自定义 uitableview 中为 5 个 UILabel 系列提供约束?

ios - 展开 Segue 会产生清晰的导航栏

iphone - 从 ios 应用程序简单登录 Facebook

ios - 使用反向地理编码(Google API)提取街道名称

ios - 将 JSON 提要转换为 NSDictionary

iphone - 重新加载表的数据

ios - 获取 UITableview 部分中的最后一个单元格

ios - 修复 UIStackView 中元素的宽度