繁体   English   中英

iOS需要可重用的表格视图控制器

[英]iOS need reusable table view controller

的iOS 7.1

简介 :当用户选择使用新的表视图控制器时,系统分配了过多的内存,这就是为什么我需要某种可重用或单例的表视图控制器的原因。


我有一个表视图控制器(让我们说垂直家庭),它的单元格内部具有内部表视图(水平)。 如果不需要创建水平表,则可以创建一个表并使用它的cellForRowAtIndexPath方法代替创建一个内部表。

无论如何,还有另一种功能。 在最内部的单元格内部有按钮,如果用户轻按该按钮,则会触发推送选择,该选择导航到另一个具有相同垂直和水平结构的表视图控制器。 用户经常去那些表视图控制器的可能性很大。

监视应用程序的内存使用量时:

  1. 如果用户呆在主视图控制器中并垂直滚动,则系统会为每个具有内部表视图的单元格分配大约1mb以上的内存。 1 mb是可以接受的,即使实际上很大。 顺便说一句。 我正在使用可重用的单元格,以通过这些代码行减少内存使用量:

     [tableView registerNib: customCellNib forCellReuseIdentifier:HorizontalContainerTableCellIdentifier]; cell = (HorizontalContainerTableCell *) [tableView dequeueReusableCellWithIdentifier:HorizontalContainerTableCellIdentifier]; 
  2. 如果用户触发了segue; 如此处所述,将创建一个新的表视图控制器 即使用户不滚动,系统也会为每个表视图控制器分配约5 mb的内存。

这意味着为每个序列创建一个新的视图控制器的成本太高了。 我可以接受,我的视图层次结构并不轻巧,但是在第一种使用情况中可以看出,如果用户垂直滚动,系统将重新使用预先创建的单元,而内存成本不会那么高。

那么我应该遵循哪种方式? 我是否需要对segue进行子类化并将它们重定向到预初始化的视图控制器并更新它的表( 像这样 )? 通过这种方式,我可以强制系统重用单元格。 还是一切正常,应该是这样吗?

如果您选择viewController,则会将较旧的viewController推入导航堆栈,并创建一个新的viewController并将其推入堆栈。 我认为您可以通过释放viewWillDisappear tableView数据并将其重新加载到viewWillAppear减少使用量。 只需触发reloadData并在numberOfRowsInSection中返回0 ,即可释放tableView使用的内存。

看来那是我的错。 因为包含最外面的表视图的控制器视图根本没有释放。 当我通过仪器进行配置文件时,尽管已经弹出它们,但我看到了几个相同控制器的实例。

究其根本原因,ARC期望将GUI元素定义为weak 我已经将属性定义更改为weakstrong 然后,ARC开始释放控制器实例。

但是我仍然有内存问题。 因为我正在为每个消耗大量内存的单元创建图像上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM