gpt4 book ai didi

objective-c - iOS - @autoreleasepool 崩溃或解决方法的解决方案?

转载 作者:行者123 更新时间:2023-11-28 20:31:18 26 4
gpt4 key购买 nike

所以应用程序崩溃了,没有堆栈跟踪或任何异常,我每次都可以复制这个崩溃。我的第一个想法是它必须是双版本,在运行 zombies 10 分钟后,我无法让应用程序崩溃,一次都没有。

在查看 Allocations 之后,我注意到调用该方法时分配对象的大小发生了巨大的跳跃。所以我最终在 for 循环中有一个 @autoreleasePool。这个自动释放池修复了崩溃;但我如何确认这确实是内存不足的问题? (didRecieveMemoryWarning 在崩溃前的任何时候都没有被调用)

为什么 autoreleasePool 解决了这个问题?

为什么没有调用 didRecieveMemoryWarning?是因为在我们到达当前运行循环结束之前应用程序内存不足吗?

- (void)doSomething
{

for (Item *item in self.items)
{
@autoreleasepool
{
// A bunch of initializations here that take a lot of memory
}
}

}

最佳答案

使用 Instruments 监控分配并查看它是否在没有自动释放池的情况下上升。

如果崩溃发生得特别快,或者您阻塞了发生内存通知的队列,您将看不到通知。

Autorelease 最有可能解决这个问题,因为在您的初始化过程中创建了大量的自动释放对象。在退出循环之前,池不会被耗尽。

关于objective-c - iOS - @autoreleasepool 崩溃或解决方法的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044034/

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