gpt4 book ai didi

iphone - 内存问题还是其他?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:34:04 25 4
gpt4 key购买 nike

我在我的 iPad 上运行一个应用程序,将图像加载到轮播中。总共有 138 张图像。如果我将该数字减少到 100,则应用程序加载正常。然而,在 138,应用程序暂停,而不是崩溃。

如断点所示,正在到达 viewDidLoad 和第一个 for 语句。问题在于第二个 for 语句。

    // loading images into the queue

loadImagesOperationQueue = [[NSOperationQueue alloc] init];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:14];

for (int i = 0; i < 137; i++) {
[tmpArray addObject:[NSString stringWithFormat:@"cover_%d.jpg", i]];
}

for (int i = 0; i < 137; i++) {
int index = arc4random() % [tmpArray count];
NSString *imageName = [tmpArray objectAtIndex:index];
[tmpArray removeObjectAtIndex:index];
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName] forIndex:i];
}

我猜测存在内存问题,尽管因为我使用的是带有 ARC 的 iOS 5我不必进行任何手动内存管理。

有没有可能是太多要保存在内存中?这是 138 张图片,每张约 146 KB。这大约是 20 MB,但我认为这不会单独导致问题。

GDB 退出时没有任何有用的输出,实际上根本没有输出。运行仪器表明,当暂停发生时,实际内存使用量仅为 6.11 MB,CPU 占用率为 77.4%,但虚拟内存占用为 175 MB。

我担心的是没有内存警告,甚至没有实际崩溃,线程只是暂停,无法恢复或自动终止,您必须从 xcode 中终止它。

最佳答案

看起来您的应用程序因为占用太多内存而被终止。确实,20MB是我遇到的极限,这也符合你谷歌搜索的结果。

关于您没有收到任何内存警告这一事实,发生这种情况是因为您在一个不将控制权返回主循环的紧密循环中将图像加载到内存中。所以您没有机会收到消息 didReceiveMemoryWarning

解决方案非常简单,预加载一些图像,当您在轮播中移动时,预加载更多图像,同时释放旧图像。实际上,您不需要在任何时候在内存中存储超过 5 张图像来保持球运行。如果您担心不必几乎每次都加载图像,则可以增加该数量。

关于iphone - 内存问题还是其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901279/

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