猿问

以编程方式检索iPhone上的内存使用情况

以编程方式检索iPhone上的内存使用情况

我正在尝试检索我的iPhone应用程序在任何时候以编程方式使用的内存量。是的,我知道Objectalloc/泄漏。我对这些并不感兴趣,只是想知道是否有可能编写一些代码,获取所使用的字节数并通过NSLog报告它。



拉丁的传说
浏览 555回答 3
3回答

慕盖茨4494581

要获取应用程序正在使用的实际内存字节,您可以执行如下示例所示的操作。但是,您确实应该熟悉各种分析工具,以及它们的设计,以便更好地了解总体的使用情况。#import&nbsp;<mach/mach.h>//&nbsp;...void&nbsp;report_memory(void)&nbsp;{ &nbsp;&nbsp;struct&nbsp;task_basic_info&nbsp;info; &nbsp;&nbsp;mach_msg_type_number_t&nbsp;size&nbsp;=&nbsp;TASK_BASIC_INFO_COUNT; &nbsp;&nbsp;kern_return_t&nbsp;kerr&nbsp;=&nbsp;task_info(mach_task_self(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_BASIC_INFO, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(task_info_t)&info, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&size); &nbsp;&nbsp;if(&nbsp;kerr&nbsp;==&nbsp;KERN_SUCCESS&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Memory&nbsp;in&nbsp;use&nbsp;(in&nbsp;bytes):&nbsp;%lu",&nbsp;info.resident_size); &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Memory&nbsp;in&nbsp;use&nbsp;(in&nbsp;MiB):&nbsp;%f",&nbsp;((CGFloat)info.resident_size&nbsp;/&nbsp;1048576)); &nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Error&nbsp;with&nbsp;task_info():&nbsp;%s",&nbsp;mach_error_string(kerr)); &nbsp;&nbsp;}}Virtualsize结构中还有一个字段,它将为您提供可用的虚拟内存(或分配给您的应用程序的内存在任何情况下都是潜在的虚拟内存)的字节数。PGB链接到的代码将给出设备可用的内存量以及它是什么类型的内存。

料青山看我应如是

标头TASK_BASIC_INFO说:/*&nbsp;Don't&nbsp;use&nbsp;this,&nbsp;use&nbsp;MACH_TASK_BASIC_INFO&nbsp;instead&nbsp;*/以下是使用MACH_TASK_BASIC_INFO:void&nbsp;report_memory(void){ &nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;mach_task_basic_info&nbsp;info; &nbsp;&nbsp;&nbsp;&nbsp;mach_msg_type_number_t&nbsp;size&nbsp;=&nbsp;MACH_TASK_BASIC_INFO_COUNT; &nbsp;&nbsp;&nbsp;&nbsp;kern_return_t&nbsp;kerr&nbsp;=&nbsp;task_info(mach_task_self(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACH_TASK_BASIC_INFO, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(task_info_t)&info, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&size); &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;kerr&nbsp;==&nbsp;KERN_SUCCESS&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Memory&nbsp;in&nbsp;use&nbsp;(in&nbsp;bytes):&nbsp;%u",&nbsp;info.resident_size); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Error&nbsp;with&nbsp;task_info():&nbsp;%s",&nbsp;mach_error_string(kerr)); &nbsp;&nbsp;&nbsp;&nbsp;}}

慕无忌1623718

下面是为了快速显示NSLog()中的泄漏状态而增强的Report_Memory()。void&nbsp;report_memory(void)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;last_resident_size=0; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;greatest&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;unsigned&nbsp;last_greatest&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;task_basic_info&nbsp;info; &nbsp;&nbsp;&nbsp;&nbsp;mach_msg_type_number_t&nbsp;size&nbsp;=&nbsp;sizeof(info); &nbsp;&nbsp;&nbsp;&nbsp;kern_return_t&nbsp;kerr&nbsp;=&nbsp;task_info(mach_task_self(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TASK_BASIC_INFO, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(task_info_t)&info, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&size); &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;kerr&nbsp;==&nbsp;KERN_SUCCESS&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;diff&nbsp;=&nbsp;(int)info.resident_size&nbsp;-&nbsp;(int)last_resident_size; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;latest&nbsp;=&nbsp;info.resident_size; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;latest&nbsp;>&nbsp;greatest&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;greatest&nbsp;=&nbsp;latest;&nbsp;&nbsp;//&nbsp;track&nbsp;greatest&nbsp;mem&nbsp;usage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;greatest_diff&nbsp;=&nbsp;greatest&nbsp;-&nbsp;last_greatest; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;latest_greatest_diff&nbsp;=&nbsp;latest&nbsp;-&nbsp;greatest; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Mem:&nbsp;%10u&nbsp;(%10d)&nbsp;:&nbsp;%10d&nbsp;:&nbsp;&nbsp;&nbsp;greatest:&nbsp;%10u&nbsp;(%d)",&nbsp;info.resident_size,&nbsp;diff, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;latest_greatest_diff, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greatest,&nbsp;greatest_diff&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSLog(@"Error&nbsp;with&nbsp;task_info():&nbsp;%s",&nbsp;mach_error_string(kerr)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;last_resident_size&nbsp;=&nbsp;info.resident_size; &nbsp;&nbsp;&nbsp;&nbsp;last_greatest&nbsp;=&nbsp;greatest;}
随时随地看视频慕课网APP
我要回答