Search code examples
iosmemoryfree

Is it legal to use the well-known free memory code in ipad/iphone app?


Memory is an issue for iphone ipad app, especially for ipad, if one wants to do something big.

Well, these two snippets of codes can 1. get current available memory of the device; 2. force free memory.

Can we use it in the app? Will appstore allow this?

#import <mach/mach.h>
#import <mach/mach_host.h>

static void print_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");

/* Stats in bytes */ 
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;
NSLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total);
}

Free memory

/* Allocate the remaining amount of free memory, minus 2 megs * /
size_t size = freemem - (2*1024*1024);
void *allocation = malloc(size);
bzero(allocation, size);
free(allocation);

Solution

  • iOS manages its memory resources pretty well if you ask me. If you're having memory issues with your app you need to profile and identify what those memory issues are and optimise them.

    Think of it from a user's perspective. Especially on multi-tasking capable iPhones/iPads (with 4.2). The user has apps in the background that he/she will want to go back to in some time. They open up your app - which nukes everything to make room for itself - and then they try to return to their other apps only to find they've been killed because your app killed them.

    I wouldn't be too happy and would probably strongly reconsider using your app again in the future.

    Apple will likely have the same opinion. Their job is make sure the users have the best experience possible, which is why they have rules and guidelines to start with.