gpt4 book ai didi

IOS 应用程序因内存不足而被终止,但未收到内存警告

转载 作者:IT王子 更新时间:2023-10-28 23:37:02 24 4
gpt4 key购买 nike

我现在遇到一个问题已经有一段时间了,我想知道是否有人可以提供帮助。我正在使用主导航 Controller 和大量 UIImage 开发 IOS 应用程序(iPad)。使用该应用程序一段时间后,该应用程序因内存不足(不在特定 View 中)而被杀死,但通过检查 iPad 日志,我并不总是看到内存不足警告(有时我会,有时我不会)。即使我收到一个,也只是“Low Memory Warning received”,但我从未收到“Level 1”或“Level 2”。

通过使用 xCode 的 Leak 工具,我找不到任何泄漏。

谁能帮忙?

最佳答案

内存警告作为通知发送,因此一旦机会出现,它将在运行循环中排队等待调度。如果您要编写一个(故意破坏的)循环,例如:

while(1)
{
NSString *newString = [NSString string];
}

那么最终您的应用会因内存不足而被终止,但它绝不会收到内存不足的警告。

如果您因内存不足而被杀死而没有收到警告,那么您可能在某个地方为自己制造了内存瓶颈,很可能您有某种循环,在自动释放池中留下了很多东西 - 所以,如果你一直通过循环,那么临时对象就会消失,因此没有长期的足迹,但它们一直在积累,你留在循环中。

为避免这种情况,您需要查看将循环的内部部分嵌套在自己的 NSAutoreleasePool 中。比如这个循环:

while(1)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *newString = [NSString string];
[pool drain]; // stylistically preferred to release, but equivalent
// in reference counted environments
}

将永远持续,但永远不会触发内存不足的情况。

关于IOS 应用程序因内存不足而被终止,但未收到内存警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445187/

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