超全的iOS各种设备信息获取方法总结(包括iPhone8/iPhone X)

2020-01-21 03:14:26于海丽

Memory内存相关数据


// 系统总内存空间
- (int64_t)getTotalMemory {
 int64_t totalMemory = [[NSProcessInfo processInfo] physicalMemory];
 if (totalMemory < -1) totalMemory = -1;
 return totalMemory;
}
// 活跃的内存,正在使用或者很短时间内被使用过
- (int64_t)getActiveMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return vm_stat.active_count * page_size;
}
// 最近使用过,但是目前处于不活跃状态的内存
- (int64_t)getInActiveMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return vm_stat.inactive_count * page_size;
}
// 空闲的内存空间
- (int64_t)getFreeMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return vm_stat.free_count * page_size;
}
// 已使用的内存空间
- (int64_t)getUsedMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return page_size * (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count);
}
// 用来存放内核和数据结构的内存,framework、用户级别的应用无法分配
- (int64_t)getWiredMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return vm_stat.wire_count * page_size;
}
// 可释放的内存空间:内存吃紧自动释放,针对大对象存放所需的大块内存空间
- (int64_t)getPurgableMemory {
 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 page_size;
 vm_statistics_data_t vm_stat;
 kern_return_t kern; 
 kern = host_page_size(host_port, &page_size);
 if (kern != KERN_SUCCESS) return -1;
 kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size);
 if (kern != KERN_SUCCESS) return -1;
 return vm_stat.purgeable_count * page_size;
}