files - liberar espacio iphone 7
Memoria disponible para la aplicaciĆ³n iPhone OS (3)
¿Existe una función o constante que defina la cantidad de memoria disponible para una aplicación en iPhone OS?
Estoy buscando una forma independiente del dispositivo (iPod touch, iPhone, iPad) para saber cuánta memoria tiene la aplicación.
Esta función devolverá la memoria disponible en 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;
}
No hay una cantidad máxima definida de memoria que una aplicación de iPhone puede usar. Que su aplicación finalice debido a la falta de memoria depende de los algoritmos que esté usando el sistema operativo y de otras aplicaciones que estén utilizando la memoria al mismo tiempo (safari, correo, etc.).
la siguiente función rápida devolverá la memoria libre del sistema (RAM) en bytes. regresará nulo en caso de falla.
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)
}