ios - 驻留内存与事件字节

标签 ios xcode memory-management instruments didreceivememorywarning

假设:我正在使用 Cocos2d 2.0 和 ARC 开发一个 iPhone 项目(并使用 XCode 4.5.2 的 Instruments)。

简短的问题:为什么常驻内存比事件字节高得多?

我这么说是因为:

使用仪器: 我确实收到了内存不足的警告,然后我运行分配工具并看到平均 3/5 MB 的事件字节。然后我得到一个峰值 (18MB),然后又回到 3/5MB。问题是,每当我不断从一个场景来回切换到另一个场景时,我都会收到内存不足的警告。

enter image description here

使用常驻内存控制台打印

- (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)并不意味着我不会收到内存不足警告?

最佳答案

您的问题的简短答案是"is"。低事件字节并不意味着您不会收到低内存警告。我这么说是因为我在几个不同的场合看到内存警告在 Instruments 坚持的同时出现,我的应用程序的实时字节数是相当合理的。

然而,绝大多数情况下,低事件字节数是一个很好的指标,表明您的应用程序没有使用太多内存,如果您正在寻找内存峰值或泄漏的间接证据,则需要关注事件字节数.

驻留内存是对已分配给应用程序且尚未被系统回收的内存的度量,但部分/大部分驻留内存可以被系统回收。事件字节是分配给您的应用程序、当前无法被系统回收的内存。因此,您应该期望应用程序的驻留内存始终高于(通常远高于)其事件字节。

关于ios - 驻留内存与事件字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624152/

相关文章:

ios - Swift 中的选择器 View

iOS-iPhone 6 和 6 plus 的图像资源

iphone - 在 iPhone 中从哪里开始增强现实?

c - 了解矩阵 c 的分配

ios - 无法通过 -pathForResource 方法检索 info.plist 数据?

ios - 已删除的证书在 key 链中不断返回

ios - 是否有任何文档/页面详细解释 monotuch 如何处理非托管(NSObject)对象的内存管理/对象生命周期

memory-management - 如何从Linux内核访问用户空间内存?

ios - 为什么我不能只使用 CocoaPods Pod 中的类

ios - 如何快速将按钮置于 Storyboard上方的桌面 View 中央?