You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:54:06