在 Objective-C 中使用异常

Posted

技术标签:

【中文标题】在 Objective-C 中使用异常【英文标题】:Using exceptions in Objective-C 【发布时间】:2012-03-15 18:48:46 【问题描述】:

我是 Objective-C 世界的新手。在研究一些 ios/Mac 应用程序时,我注意到 try -catch 很少使用,如果使用的话。 例如在 Java 中,它几乎一直在使用。 为什么它在 Objective-C 中不常见?

【问题讨论】:

What’s the rationale behind the Cocoa exception policy - or why use exceptions only for programmer errors? 的可能重复项 还有一个 great 由 zneak 和 bbum 提供的答案:***.com/questions/4648952/objective-c-exceptions 【参考方案1】:

Objective-C 中的异常通常用于真正的异常情况并且几乎总是程序员错误。要传达可恢复的错误,请使用 NSError** 模式。

【讨论】:

【参考方案2】:

有很多 SDK 方法采用 NSError** 参数并返回 BOOL。为了指示错误,它们返回 false 并通过错误参数反馈错误以传达信息。

异常被使用,但通常用于运行时级别出现故障的情况 - 例如某些对象无法处理选择器。虽然看起来可能与我刚刚写的相反,但异常往往表示设计错误,而不是运行时错误。

NSError** 惯用语是您所需要的一切,例如失败的 URL 连接、数据转换等,其中存在错误条件,但程序确实不应该被彻底杀死。

开始阅读:Error Handling Programming Guide

【讨论】:

以上是关于在 Objective-C 中使用异常的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 转换为 Objective-C:异常处理

Objective-c KVO:object vs changeDictionary

Objective-C:断言 vs. 异常 vs. 错误

Xcode 4中的“运行>停止Objective-C异常”?

object-c的介绍

初探 Objective-C/C++ 异常处理实现机制