UINavigationController pushviewcontroller内存管理

Pra*_*lan 1 memory-management objective-c uinavigationcontroller pushviewcontroller ios

我有一个UITableiew列出了许多联系人,并从表视图委托didSelectRowAtIndexPath我通过使用UINavigationController pushviewcontroller导航到'Contactview'UIViewController .

例如,如果我将第一个联系人导航到Contactview,则Live Bytes内存从1 MB增加到3 MB.然后,当我点击后退按钮时,会调用viewcontroller delloc方法,但内存仍然保持在2.95MB到3MB左右.我的问题是,当调用viewcontroller delloc方法时,viewcontoller 的内存应该被释放吗?我错了吗?如果我错了,请建议我.我正在使用ARC项目.

提前致谢..

Dan*_*tín 5

如果您来回推动导航并且看到内存无限攀爬,则会出现内存管理问题.即使使用ARC,您也可能放弃了记忆.您可以使用Instruments中的Allocations模板检测它.

  1. 在Instruments中,将应用程序置于一个众所周知的启动状态(例如,显示表视图).
  2. 单击"快照分析"下的" 标记堆"按钮.
  3. 来回导航控制器一次.
  4. 您将看到分配图中的内存使用量略有增加.这是正常的,内部缓存可能存储一些信息.
  5. 再次单击" 标记堆"按钮.
  6. 您将在静态列中看到许多对象.
  7. 多次重复步骤3-6,并在每次迭代后查看是否存在"仍然存在"的对象.

如果每个快照中仍存在几乎恒定数量的静止物体,请单击其中一个快照中的右箭头按钮,您将看到所有仍然存在的物体.查找可能由您创建的对象,选择一个,展开它,然后通过简单的单击选择其内存地址.然后单击" 扩展详细信息"按钮以查看显示对象分配位置的堆栈跟踪.有了这个代码上下文,我相信你会理解为什么你的记忆被抛弃了.