在Objective-C中退出并处理致命错误的最佳方法是什么?

时间:2011-06-02 18:55:21

标签: objective-c

假设我的应用程序做了一些无法恢复的事情(这种情况从未发生过,对吧?:P)。我应该使用exit()吗?我应该使用NSAssert(false,@“Foo”)吗?我应该以某种方式扔东西吗?谷歌的答案很难。

2 个答案:

答案 0 :(得分:0)

我不认为你应该强行退出你的应用程序,如果发生了不好的事情,因为这对用户来说很烦人 - 他们不会知道出了什么问题。此外,如果这种情况经常发生,Apple可能会拒绝您的应用。

相反,您应该弹出一个对话框来说明出错的地方(例如写入数据库的错误,请再试一次)。

如果您的应用最终处于完全崩溃的状态,则应重新设计应用。你能举一个“不可恢复”的例子吗?

答案 1 :(得分:0)

如果您的应用确实无法恢复某些内容,则可能会被O.S.终止。没有你有可能知道它。考虑访问一个解除分配的对象。

如果您正在考虑您的程序可能检测到的错误或不可预见的情况,那么它在很大程度上取决于它的含义。但一般政策是:

  1. 告知用户发生错误的事实;

  2. 尝试尽可能多地恢复;

  3. 正常退出应用程序。

  4. 1和3明确排除了您提及的NSAssertexit()选项。投掷也没有帮助,因为如果你抛出异常并且不处理它,你的程序将被突然终止。

    正常退出意味着像正常情况一样退出,当调用所有dealloc方法时,所有文件都关闭,所有资源都被释放。并且可能存储有关程序运行状态的足够信息,以便在下次启动时恢复。