在iPhone OS中,是否有一个函数或常量定义应用程序可用内存的数量?
我正在寻找一种与设备无关的方式(iPod touch、iPhone、iPad),以了解应用程序还剩下多少内存。
在iPhone OS中,是否有一个函数或常量定义应用程序可用内存的数量?
我正在寻找一种与设备无关的方式(iPod touch、iPhone、iPad),以了解应用程序还剩下多少内存。
以下函数将返回可用内存的字节数:
#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;
}
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)
}
iPhone应用程序可以使用的内存没有明确定义的最大限制。你的应用程序是否因为缺乏内存而被终止,取决于操作系统使用的算法以及同时使用内存的其他应用程序(如Safari、Mail等)。