您好我已经分配了内存,因为我在仪器中注意到很多堆增长,所以我设计了一个测试应用程序。
测试应用包含两个ViewControllers,每个都有一个按钮。 第一个ViewController通过Segue Modal链接到SecondViewController(除了自动生成之外它根本没有代码)。
第二个ViewController只有函数
-(IBAction)back:(id)sender{
[self dismissModalViewControllerAnimated:YES];
}
所以我可以翻看视图。
当我测试仪器时,我在第二次观察并返回后注意到堆增长。
那怎么可能?我错过了什么?
答案 0 :(得分:1)
堆的大小不是应用程序内存使用情况。
当你的应用程序处于活动状态时,内核必须为你分配内存 现代系统使用虚拟内存。基本上,他们将物理地址映射到您的进程将访问的虚拟地址。
这个映射由内核处理,它需要内存。
如果您请求1MB内存,则必须通过增加地址空间的大小来分配内存以跟踪分配的物理页面。
如果释放所有内存,内核通常会保留用于映射的内存,并将其重新用于下一次分配,从而无需为其重新分配空间。
这就是堆大小不变的原因。但它并不表示您的应用程序的内存使用情况。
如果使用Instruments,请查看VM Tracker工具。