假设:我正在使用带有 ARC 的 Cocos2d 2.0 开发一个 iPhone 项目(并使用 XCode 4.5.2 的仪器)。
简短的问题:为什么常驻内存比实时字节高得多?
我这样说是因为:
使用工具: 我确实收到内存不足的警告,我运行我的分配工具并看到平均 3/5 MB 的实时字节。然后我得到一个峰值(18MB),然后又回到 3/5MB。问题是,每当我从一个场景到另一个场景来回前进时,我都会收到内存不足的警告。
使用常驻内存控制台打印
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
[self report_memory];
[[CCDirector sharedDirector] purgeCachedData];
}
-(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 ) {
NSLog(@"Memory in use (in bytes): %u", info.resident_size);
} else {
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}
}
我确实收到内存警告,第一次打印是 48MB,然后是 48MB,然后是 66MB,然后..崩溃!
所以我想知道,为什么人们说我应该只担心Live Bytes?
换句话说,假设我的应用程序是唯一一个正在运行的应用程序(所有其他应用程序都被杀死),我可以说具有非常低的活动字节(从 4MB 到 20MB)并不意味着我不会收到内存不足的警告吗?