【问题标题】:Cocoa/iOS Error Handling Style, without NSErrorCocoa/iOS 错误处理风格,没有 NSError
【发布时间】:2014-01-26 00:01:17
【问题描述】:

这是一个关于处理未使用 NSError 的可能错误的一般问题。

假设我们有一些像这样的典型 iOS/Cocoa 代码:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData: myData];

文档声明将返回一个 NSXMLParser 对象,或者“如果发生错误则为零”。

(为了记录,这个特定的方法很乐意将 nil 作为 'data' 参数,返回一个有效的 NSXMLParser 实例。)

我注意到很多 iOS 开发人员从不检查这些类型的返回值。他们假设类 init 一直有效。我觉得这很冒险,但我想听听经验丰富的 Cocoa 开发人员的意见。

如果我在返回值上使用 NSAssert,这可以在开发过程中保护我,但当我的应用程序在野外使用时对我几乎没有什么作用。

我应该检查 nil 返回值,并自己构造一个 NSError 吗?还是做点别的?

【问题讨论】:

  • @Bryan,这就是我要问的。你会如何处理这个特定的错误?
  • 我将只使用 NSAssert 来检查它是否不为零。如果发生错误,我将得到 nil 解析器并且不会完成任何工作。希望这是我能得到的最好的。
  • @Abizern,如果你用谷歌搜索那行代码,你会发现很多结果。绝大多数实现都没有检查返回值。这可能只是因为示例/片段实现,但我怀疑一般方法是相同的。但是,如果您想与我们分享您的方法,我很乐意倾听。
  • 不知道为什么你在这里被否决......我认为这是一个关于最佳实践的好问题。 (我认为问题是苹果真的没有,或者他们不关注他们,他们的错误不断通过QA。所以苹果范博伊在跟随人群时并不知道更好)。

标签: ios cocoa error-handling nserror


【解决方案1】:

有些不成文的规则是,如果 Apple 的 init 方法可以以可恢复的方式失败,它将有一个 NSError 参数。如果诸如NSString 之类的方法初始化失败,那么情况将非常糟糕,以至于无法恢复。可能太糟糕了,以至于不可能分配NSError,更不用说NSLog 消息了。无论您做什么,该应用都可能很快崩溃。

不幸的是,第 3 方班级很少遵循此规则,但您应该这样做。

【讨论】:

  • 感谢 Zaph,感谢您的深思熟虑和周到的回复。我会采取你的方法。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2011-08-06
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多