内存是iphone ipad应用程序的一个问题,特别是对于ipad,如果想要做一些大事。
嗯,这两个代码片段可以1.获取设备的当前可用内存; 2.强制释放记忆。
我们可以在应用中使用它吗? appstore会允许吗?
#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);
}
可用内存
/* 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);
答案 0 :(得分:13)
从用户的角度考虑它。特别是在支持多任务处理的iPhone / iPad(4.2)上。用户在后台拥有他/她希望在一段时间内返回的应用程序。他们打开你的应用程序 - 它为所有人创造了自己的空间 - 然后他们试图回到他们的其他应用程序,却发现他们已被杀死,因为你的应用程序将他们杀死了。
我不会太高兴,并且可能会在将来再次强烈重新考虑使用您的应用程序。
Apple可能会有同样的看法。他们的工作是确保用户获得最佳体验,这就是他们开始制定规则和指南的原因。答案 1 :(得分:7)
您的应用程序是否会被拒绝,我不知道(应该,但我不知道Apple是否会明确测试此类行为。)
然而,这是一个可怕的想法,无论如何都不会起作用。
正如Jasarien所说,您的应用程序将在可能与其他应用程序共享资源的环境中运行。这是一个更好的解决方案,可以优化应用程序中的内存使用 - 最大限度地减少内存使用 - 并使您的应用程序尽可能地对系统友好。资源稀缺,谨慎使用它们。
然而,“分配剩余内存”代码是假的。无法保证空闲内存是连续的。分配很可能会失败。
真正的问题是你的应用程序为什么要使用如此多的内存以及你为减少它而做了些什么?