ggo*_*d75 4 iphone memory-leaks instruments uinavigationcontroller
我有一个基于导航控制器的应用程序,里面有5个视图控制器.当我推动一个视图控制器时,我会分配一些内存,当我回到popViewController时,我的delloc()方法被正确调用.我确信我推送和弹出的每个视图控制器都以正确的方式调用dealloc.
然而,当我使用Instruments运行应用程序时(从性能工具开始 - >对象分配,泄漏),我有一种奇怪的行为.当一个视图控制器弹出时,内存使用量不会减少,确切地说它没有按预期减少:当我启动应用程序时它使用950 KB,然后我推送第一个视图控制器,内存使用量增加到1,56MB ,最后我弹出视图控制器,内存使用量现在为1,55MB.
这种行为对吗?我确信每当我弹出一个视图并且Leaks仪器没有显示任何内存泄漏时,每个dealloc方法都会被正确调用.我想操作系统以某种方式"保留"视图,以便第二次推送同一个视图控制器时加载过程要快得多......
有人可以确认这种行为是对的吗?谢谢
这是预期的."你只对你做过分配,复制等的对象负责"的内存处理规则也适用于此处.
当你把东西推到navigationController上时,我假设你这样做:
MyController *myCon = [[MyController alloc] init];
[self.navigationController pushViewController:myCon animated:YES];
[myCon release]; //You have alloc and release.
Run Code Online (Sandbox Code Playgroud)
navigationController通常处理层次结构,其中用户向下钻取数据集,然后再向上钻取.通过在内存充足时保持控制器是navigationControllers节省必须再次实例化控制器的方式5秒.稍后当用户点击"返回"时.您可以看到这一点,因为dealloc永远不会被调用,但是在备份时会调用viewWillAppear和viewDidAppear.如果内存不足,navigationController将开始在其堆栈上释放控制器.
但!确保前后返回不会导致viewControllers一次又一次地被实例化,这将使内存占用增加并且存在泄漏.navigationController应该注意到它已经在其堆栈中有viewController并只显示它.
您应该能够浏览所有视图,如果它们"适合"在内存中,应用程序永远不应该从此处增加其内存占用.
| 归档时间: |
|
| 查看次数: |
4322 次 |
| 最近记录: |