【发布时间】:2012-09-06 15:00:53
【问题描述】:
我正在尝试更多地了解异常。我在我的 AppDelegate 中安装了一个未捕获的异常处理程序:
// in applicationDidFinishLaunching:
NSSetUncaughtExceptionHandler(&HandleExceptions);
...
void HandleExceptions(NSException *exception) {
// Save application data on crash
[appDelegate saveData];
}
所以我不完全确定这是如何工作的。假设我访问一个数组越界,这会引发异常。为什么不调用此方法?或者说在从表中插入或删除行后抛出断言异常 - 在这些情况下,我如何在应用程序崩溃之前保存数据?
一般来说,当系统抛出异常时,我怎样才能有机会在应用程序崩溃之前保存数据?或者它不是那样工作的?未捕获的异常处理程序是否仅适用于我抛出的未包含在 @catch 或 @try 中的异常?
【问题讨论】:
-
仅用于未捕获的异常。如果你在其他地方抓到它们,它们也不是没有被抓到的。此外,这个问题缺乏足够的信息。您需要提供一个无法按预期工作的特定代码示例。
-
@JodyHagins it 不像我预期的那样工作..整个事情。
-
如果我在没有任何
@try或@catch的情况下访问越界数组,则不会调用该方法。不应该吗? -
让我补充一点,盲目地保存在未捕获的异常处理程序中并不是一个好习惯。你不知道你为什么到达那里,你可能正在破坏你的数据存储。一般来说,您希望在此处尽可能少做可能会发生变异和数据的事情。
-
@JodyHagins 真的吗?知道我可以在哪里阅读更多相关信息吗?
标签: objective-c ios cocoa exception