我正在为App Store开发一个应用程序,并且内存管理存在奇怪的问题。
我正在使用ARC。
在连接到乐器的 unjailbroken iPod touch 4G 6.0.1 上测试我的应用程序时,一切似乎都很好 - 我的应用程序使用低于5mb 的内存时间并没有泄漏。然而,在长时间使用之后,尽管仍然在仪器中被监视为< 5Mb,我开始得到内存警告,最后被操作系统 kill 。我在后台没有任何打开的应用程序,所以我假设我的应用程序泄漏内存仪器无法跟踪。怎么会这样?
此外,我开始使用一个函数来跟踪内存使用情况,具体来说:
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if( kerr == KERN_SUCCESS ) {
return info.resident_size/1024.0/1024.0;
} else {
return -1.0;
}
它似乎报告我的应用程序行为(60-70Mb)可能预期的范围内存使用情况。我在仪器中同时进行测量,它仍显示〜3-4Mb。这是怎么回事?
答案 0 :(得分:4)
仪器可能跟踪堆分配而不是总地址空间消耗。如果您的应用程序导致大量文件被内存映射,则可能导致堆分配量(malloc等)较低,但应用程序的系统内存消耗较高。
在不了解您的应用程序的情况下,除了上述内容之外,无法进行真正的推测。
答案 1 :(得分:1)
Allocations仪器仅跟踪堆内存,它只占整个运行应用程序内存使用量的一小部分。
查看VM Tracker工具,即整个虚拟内存使用情况统计信息,也许您可以找到问题所在。