gpt4 book ai didi

memory-management - 使用比较 Xcode iOS9 中的 'Other Processes' 内存不足

转载 作者:行者123 更新时间:2023-12-04 12:53:12 25 4
gpt4 key购买 nike

我的应用程序在具有 0.5GB 内存的设备上崩溃。但是,在 Xcode 中分析内存使用情况 - 它很少超过 140MB。我已经使用仪器检查泄漏,但没有一个是重要的。

但是,当我运行我的应用程序时,“其他进程”使用的内存总是很高。这是启动后的静止状态:

enter image description here

我在代码中的每个循环周期中添加了 1 秒延迟,并发现在每个循环中,“其他进程”每个对象的内存使用量增加了大约 3MB,直到在 0.5GB 设备上,它用完并崩溃。

enter image description here

This question表明这些是使用该内存的其他应用程序,但我已经关闭了所有其他应用程序,并且使用情况与我的循环代码直接相关。

在我的应用程序中实际运行的其他进程中可能会使用什么内存?为什么我的“其他进程”占用了这么多内存?

为了了解我在做什么,我从 Parse 中提取数据,然后遍历返回的每个对象并从数据创建一个 SKNode 子类对象。我将此节点添加到数组(供引用)和场景中。这是我在添加延迟的主线程上执行的代码。注意线路:

self drawRelationships:[_batches objectAtIndex:_index] forMini:_playerMini];

是一个 BFTask 等异步的。我将数组分成较小的批次,以便在绘制每个批次时看到增量内存使用情况。如果我尝试一次绘制整个批次,则会立即发生 OOM...
- (void)drawNewRelationships
{
_batches = [NSMutableArray array];
_index = 0;

[_playerMini fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) {
[ParseQuery getNewRelationshipsForMini:_playerMini current:_miniRows.relationshipIds withBlock:^(NSMutableArray *newRelationships) {
_batches = [self batchArrays:3 fromArray:newRelationships];
_index = 0;
[self drawBatches];
}];
}];
}

- (void)drawBatches
{
if ([_batches objectAtIndex:_index]) {
[self drawRelationships:[_batches objectAtIndex:_index] forMini:_playerMini];
_index++;
if (_index < [_batches count]) {
[self performSelector:@selector(drawBatches) withObject:nil afterDelay:1];
}
}
}

该节点包含其他数据(几个数组、自定义对象),我尝试在删除所有数据的情况下运行该应用程序。我试过在主线程和后台线程上运行。我试过使用 BFTask 异步做事。我尝试过的一切都以相同的行为结束 - 创建这些 SKNode 对象会占用“其他进程”中的内存,直到在低内存设备上崩溃。

可能值得注意的是,这种行为自 iOS9 以来才开始发生。

基本上,什么可以在“其他进程”中使用所有这些内存,我该如何释放它?

更新

我试过运行 Sprite Kit 示例应用程序,即使它在启动时在其他进程中使用 ~550MB。这可能是一个主要的 Sprite Kit 错误吗?

enter image description here

最佳答案

结果证明这是一个相当具体的问题。分配给其他进程的内存实际上是我的应用程序内存泄漏。它发生在我展平一个有很多 child 的节点时,但没有将包含对所有预展平节点的引用的 NSDictionary 置零。出于某种原因,在分析时没有出现这种内存泄漏。

我还发现了一篇很好的博文:http://battleofbrothers.com/sirryan/memory-usage-in-sprite-kit减少应用程序的内存占用。如果您正在尝试优化,值得一读。

关于memory-management - 使用比较 Xcode iOS9 中的 'Other Processes' 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com