4

iOS 应用程序有内存警告级别 1 和级别 2。问题是对于所有 iPad 设备(从 iPad 1 到 iPad 4、mini),发出警告的响应阈值是多少。例如,对于 iPad1,是 100 MB 吗?

谢谢


我也曾经打印出收到内存警告时使用的内存。

#import "mach/mach.h"
-(void) report_memory {

    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        DLog(@"Memory in use (in MB ): %u", info.resident_size/1024/1024);
    } else {
        DLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
}
4

2 回答 2

5

我不认为Apple官方记录了它,主要是因为它可能会在iOS版本之间发生变化,但这些是“学习iPhone和iPad cocos2d游戏开发”一书中所述的数字:

+-----------------------------------------------------------------+  
| Installed Memory |  Available Memory | Memory Warning Threshold |
+-----------------------------------------------------------------+  
| 128 MB           |  35-40 MB         |  20-25 MB                | 
| 256 MB           |  120-150 MB       |  80-90 MB                | 
| 512 MB           |  340-370 MB       |  260-300 MB (estimated)  |
+-----------------------------------------------------------------+
于 2013-03-20T09:01:52.297 回答
3

根据练习和记忆... iPad 1 将在大约 16Mb 时触发级别 1,并且可能会在大约 32mb 时触发级别 2。iPad 2/3/mini 似乎可以达到大约 50Mb 到 64Mb。iPad 4 我还没有真正得到确凿的结果,但从规格来看,我预计在事情开始抱怨之前会达到大约 100-128Mb。

这是我至少在测试期间在仪器中观察到的。我已经开始运行一个宏来检测设备类型,并通过禁用石英绘制的项目、重图像等优雅地回退以支持旧设备......

同样,这些都不是来自任何规格的硬数据,只是我的测试结果。

这是我在应用程序委托中使用的一个类方法来检测 iPad 1,例如...

+ (BOOL)isiPad1 {
  struct utsname platform;
  int rc = uname(&platform);
  if(rc == -1) return NO;
  return !strcmp("iPad1,1", platform.machine);
}
于 2013-03-20T08:57:45.243 回答