可以使用try ... catch机制来避免内存崩溃吗?

时间:2010-09-10 10:50:52

标签: objective-c

我真的很有兴趣知道,是否有可能使用try ... catch机制,我们可以避免应用程序的内存崩溃... ??

假设我们期待内存泄漏的程序部分保存在try ... catch块下,如果程序崩溃(即内存泄漏),则catch语句执行。所以我们可以防止我们的程序崩溃。

有可能吗?如果是,如何或如果没有,为什么不呢?

3 个答案:

答案 0 :(得分:4)

try / catch块用于捕获异常并阻止它在callstack中向上传播。

这个想法是你在你知道如何处理它的地方捕获它,然后你有机会执行代码以响应异常。

这不是一个可以防止任何事情的神奇解决方案,这正是我上面所说的。你做的例外是重要的。

内存泄漏和崩溃不是一回事,程序因内存泄漏而崩溃是罕见的,除非它实际耗尽内存。事实之后,内存泄漏很少“可以修复”。解决内存泄漏的正确且通常唯一的方法是避免它首先发生。

另外,是的,在某种程度上,你可以通过添加try / catch块来防止程序崩溃,但你唯一成功的就是隐藏用户的崩溃,然后让程序继续运行。 “崩溃”并不总是可以安全忽视,或者更确切地说,它们通常不容易被忽视。

如果您正在寻找一些关于如何避免程序崩溃的全能建议,请听以下建议:

  • 编写正常运行的程序

我认为我们需要更多地了解您遇到的问题,或者您需要发布更清晰的问题。

答案 1 :(得分:0)

我不相信任何进程系统在内存不足的情况下做正确的事情。我们有一些系统在发生PermGen异常时完全锁定并需要kill -9来摆脱。

如果您希望系统自我纠正,请将其包装在脚本或监视健康状况,心跳或诊断页面或任何有意义的系统中。如果您没有收到任何健康指示,请将其杀死(必要时很难)并重新启动它。

最重要的是使用测试和验证来监控内存(和磁盘)的使用情况,并确保您真正了解系统的行为方式并正确配置,以免发生这种情况。

重启解决方案是一个不好的选择,因为您必须测试并确定您可以随时终止您的应用程序并确信它可以正确重启,这可能更加困难。

答案 2 :(得分:0)

如果你问“我可以通过try catch捕获分段错误”,答案是否定的。

try catch用于处理Objective-C异常,即通过执行@throw语句引发的异常。由例如引起的分段错误空指针解引用是由操作系统生成的,是Unix信号的示例,只能由OS级系统调用捕获和处理,例如sigaction(2)系统调用。即便如此,你可以做的唯一理智是立即终止程序,因为你可能有一个损坏的堆或堆栈。