Available memory for iPhone OS app

前端 未结 3 586
遇见更好的自我
遇见更好的自我 2020-11-27 11:30

Is there a function or constant defining the amount of available memory for an app in iPhone OS?

I\'m looking for a device-independent way (iPod touch, iPhone, iPad)

相关标签:
3条回答
  • 2020-11-27 12:10

    The following Swift function will return the system's free memory (RAM) in bytes. It will return nil on failure.

    func systemFreeMemorySize() -> UInt?
    {
        let HOST_VM_INFO_COUNT: mach_msg_type_number_t = mach_msg_type_number_t(sizeof(vm_statistics_data_t) / sizeof(integer_t))
    
        let host: host_t = mach_host_self()
    
        var pageSize: vm_size_t = vm_size_t()
        let hostPageSizeKernStatus: kern_return_t = host_page_size(host, &pageSize)
        guard hostPageSizeKernStatus == KERN_SUCCESS else {
            NSLog("Error with host_page_size(): " + (String.fromCString(mach_error_string(hostPageSizeKernStatus)) ?? "unknown error"))
            return nil
        }
    
        var stats: vm_statistics_data_t = vm_statistics_data_t()
        var count: mach_msg_type_number_t = HOST_VM_INFO_COUNT
    
        let kernStatus: kern_return_t = withUnsafeMutablePointer(&stats) {
            return host_statistics(host, HOST_VM_INFO, host_info_t($0), &count)
        }
    
        guard kernStatus == KERN_SUCCESS else {
            NSLog("Error with host_statistics(): " + (String.fromCString(mach_error_string(kernStatus)) ?? "unknown error"))
            return nil
        }
    
        return UInt(stats.free_count) * UInt(pageSize)
    }
    
    0 讨论(0)
  • 2020-11-27 12:14

    There is no defined maximum amount of memory that an iPhone app can use. Whether your app will be terminated due to lack of memory depends on whatever algorithms the OS is using and what other apps happen to be using memory at the same time (safari, mail, etc.).

    0 讨论(0)
  • 2020-11-27 12:22

    This function will return the available memory in bytes:

    #import <mach/mach.h> 
    #import <mach/mach_host.h>
    
    natural_t  freeMemory(void) {
        mach_port_t           host_port = mach_host_self();
        mach_msg_type_number_t   host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
        vm_size_t               pagesize;
        vm_statistics_data_t     vm_stat;
    
        host_page_size(host_port, &pagesize);
    
        if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) NSLog(@"Failed to fetch vm statistics");
    
        natural_t   mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize;
        natural_t   mem_free = vm_stat.free_count * pagesize;
        natural_t   mem_total = mem_used + mem_free;
    
        return mem_free;
    }
    
    0 讨论(0)
提交回复
热议问题