如何使用Objective-C编程获取iOS设备的空闲/已用内存占用
iOS获取设备空闲/已用运行内存的实现方式
苹果没有公开官方上层API直接获取设备的空闲、已用运行内存,你当前使用[NSProcessInfo processInfo].physicalMemory获取总物理内存的方式是正确的,额外的内存统计可以通过Mach层底层接口计算得到。
实现代码
首先需要导入依赖的头文件:
#import <mach/mach.h> #import <mach/mach_host.h>
以下是完整的内存统计实现:
- (void)getDeviceRAMInfo { mach_port_t hostPort = mach_host_self(); mach_msg_type_number_t hostInfoCount = HOST_VM_INFO64_COUNT; vm_size_t pageSize; vm_statistics64_data_t vmStats; // 获取内存页大小 host_page_size(hostPort, &pageSize); // 获取内存统计数据 kern_return_t kernelReturn = host_statistics64(hostPort, HOST_VM_INFO64, (host_info64_t)&vmStats, &hostInfoCount); if(kernelReturn == KERN_SUCCESS) { // 空闲内存:单位字节 uint64_t freeRAM = vmStats.free_count * pageSize; // 活跃内存:已被使用、可被分页调度 uint64_t activeRAM = vmStats.active_count * pageSize; // 非活跃内存:近期未使用、可被回收复用 uint64_t inactiveRAM = vmStats.inactive_count * pageSize; // 常驻内存:无法被分页调出、必须驻留RAM uint64_t wiredRAM = vmStats.wire_count * pageSize; // 总已用内存 uint64_t usedRAM = activeRAM + inactiveRAM + wiredRAM; // 按需转换单位输出,示例转成MB NSLog(@"空闲运行内存:%.2f MB", freeRAM / 1024.0 / 1024.0); NSLog(@"已用运行内存:%.2f MB", usedRAM / 1024.0 / 1024.0); } }
补充说明
- 以上统计的是设备运行内存(RAM)的占用情况,和系统设置中展示的「iPhone储存空间」属于完全不同的指标,后者统计的是磁盘存储占用,数值不会和上述结果匹配
- 如果仅需要获取当前App自身的内存占用,可直接使用
NSProcessInfo的属性获取,代码更简便:
uint64_t appUsedRAM = [NSProcessInfo processInfo].residentSize; NSLog(@"当前App内存占用:%.2f MB", appUsedRAM / 1024.0 / 1024.0);
内容的提问来源于stack exchange,提问作者Jafar Mohammed
相关产品推荐
相关产品推荐

