Search code examples
iphonecrashmemory-warning

iPhone app crashes before memory warning event


The app crashes because of memory overhead, but applicationDidReceiveMemoryWarning event doesn't raise in time. (I know exactly that the reason of crash is low memory because it crashes on resources loading and there is no corresponding crash report, and XCode doesn't break debugging, app silently quits to springboard).

So I'm looking for some method how to prevent this overhead. Maybe there is a function or instrument that gives amount of available memory?


Solution

  • The answer in link by Robert Harvey:

    #import <mach/mach.h>
    #import <mach/mach_host.h>
    
    +(natural_t) get_free_memory {
    mach_port_t host_port;
    mach_msg_type_number_t host_size;
    vm_size_t pagesize;
    host_port = mach_host_self();
    host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    host_page_size(host_port, &pagesize);
    vm_statistics_data_t vm_stat;
    if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) {
    NSLog(@"Failed to fetch vm statistics");
    return 0;
    }
    /* Stats in bytes */
    natural_t mem_free = vm_stat.free_count * pagesize;
    return mem_free;
    }