在ipad/iphone应用中使用众所周知的免费内存代码是否合法?

Jac*_*ack 0 memory free ios

内存是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);
}
Run Code Online (Sandbox Code Playgroud)

免费记忆

/* 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);
Run Code Online (Sandbox Code Playgroud)

Jas*_*ien 13

如果你问我,iOS会很好地管理它的内存资源.如果您的应用程序存在内存问题,则需要分析并确定这些内存问题并对其进行优化.

从用户的角度考虑它.特别是在支持多任务处理的iPhone/iPad(4.2)上.用户在后台拥有他/她希望在一段时间内返回的应用程序.他们打开你的应用程序 - 它为所有人创造了自己的空间 - 然后他们试图回到他们的其他应用程序,却发现他们已被杀死,因为你的应用程序杀了他们.

我不会太高兴,并且可能会强烈重新考虑将来再次使用您的应用程序.

Apple可能会有相同的意见.他们的工作是确保用户获得最佳体验,这就是为什么他们有规则和指导方针.

  • Carter - 在iOS上,当内存变低时,应用程序会收到内存警告.应用程序有机会清理一些不必要的内存,以释放一些内存.如果内存警告后内存仍然太低,那么应用程序将被丢弃.这是iOS上的预期行为.当最前面的应用程序请求的内存超过可用内存时,后台应用程序将被终止以满足要求.这就是为什么Apple强调在将应用程序发送到后台时保存任何关键内容非常重要的原因. (3认同)

bbu*_*bum 7

无论您的应用程序是否会被拒绝,我都不知道(它应该是,但我不知道Apple是否会明确测试此类行为).

然而,这是一个可怕的想法,无论如何都不会起作用.

正如Jasarien所说,您的应用程序将在可能与其他应用程序共享资源的环境中运行.这是一个更好的解决方案,可以优化应用程序中的内存使用 - 最大限度地减少内存使用 - 并使您的应用程序尽可能地系统友好.资源稀缺,谨慎使用.

但是,"分配剩余内存"代码是假的.无法保证空闲内存是连续的.分配很可能会失败.

真正的问题是你的应用程序为什么要使用如此多的内存以及你为减少它而采取的措施?