gpt4 book ai didi

iphone - iOS:检测主运行循环之外的低内存崩溃

转载 作者:行者123 更新时间:2023-11-29 13:18:01 25 4
gpt4 key购买 nike

在我的一个应用程序中,我正在做大量涉及数组的计算并绘制它们。计算涉及用户输入,有时,如果用户输入疯狂的值,应用程序将继续执行计算,直到占用过多内存并被杀死。当用户尝试再次打开应用程序时,它会尝试根据上次保存的数据进行相同的计算,然后再次崩溃。用户需要删除并重新下载应用程序才能恢复为默认值。

为了解决这个问题,我想在应用程序因内存不足而被杀死时转储所有保存的数据。我尝试在我的 appDelegate 中实现 applicationDidReceiveMemoryWarning: 并在进行计算的 viewController 中实现 didReceiveMemoryWarning:。这两个函数都没有被调用。在researching a bit之后,我发现这是因为我阻塞了主运行循环。

我怎样才能最好地处理这种情况?

最佳答案

你基本上不应该阻塞主运行循环。您可以阻止用户界面(带有模态加载屏幕或类似内容),但如果您阻止了主运行循环,您将面临各种问题。

有很多方法可以将您的工作转移到辅助线程上 - 最简单/最高级别的选项之一是使用 performSelectorInBackground:。如果您需要更多的有限控制,您可以使用 NSOperationNSOperationQueue,或者一直使用 GCD(希望您不需要获得这么低的级别)。

将工作放在辅助/后台线程上的另一个优点是,如果操作看起来花费的时间太长,您可以让用户取消操作,也许可以使用“取消”按钮。当用户点击它时,您可以取消正在进行的操作,并首先避免这些内存警告发生。

但不要忘记任何 UI 工作都需要在主线程上进行。因此,一旦完成处理,请确保在主线程上更新图形本身(使用 performSelectorOnMainThread 等)。

关于iphone - iOS:检测主运行循环之外的低内存崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154641/

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