ios 7.1
总结:当用户切换到新的 TableView Controller 时,系统分配了太多内存,这就是我需要某种可重用或单例 TableView Controller 的原因。
我有一个 TableView Controller (比如说垂直主页),它的单元格内部有内部 TableView (水平)。如果我不需要创建水平表,我可以创建一个表并操纵它的 cellForRowAtIndexPath
方法,而不是创建一个内部表。
无论如何,还有另一个功能;在最内部的单元格中有按钮,如果用户点击它,它会触发一个推送 segue,导航到另一个具有相同垂直和水平结构的 TableView Controller 。用户很可能会多次使用这些 TableView Controller 。
监控应用程序的内存使用情况时:
如果用户停留在主视图 Controller 并垂直滚动,系统会为每个具有内 TableView 的单元格多分配大约 1 MB。 1 mb 是可以接受的,即使它实际上已经很大了。顺便提一句。我正在使用可重复使用的单元格,以便能够通过这些代码行减少内存使用量:
[tableView registerNib: customCellNib forCellReuseIdentifier:HorizontalContainerTableCellIdentifier]; cell = (HorizontalContainerTableCell *) [tableView dequeueReusableCellWithIdentifier:HorizontalContainerTableCellIdentifier];
如果用户触发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/