objective-c – Apple检查返回值而非错误的模式背后的理由是什么?

objective-c – Apple检查返回值而非错误的模式背后的理由是什么?,第1张

概述Apple的 Using and Creating Error Objects指南给出了以下代码示例: NSError *theError;BOOL success = [myDoc writeToURL:[self docURL] ofType:@"html" error:&theError];if (success == NO) { // Maybe try to determi Apple的 Using and Creating Error Objects指南给出了以下代码示例:

NSError *theError;BOol success = [myDoc writetoURL:[self docURL] ofType:@"HTML" error:&theError];if (success == NO) {    // Maybe try to determine cause of error and recover first.    NSAlert *theAlert = [NSAlert alertWithError:theError];   [theAlert runModal]; // Ignore return value.}

并附上声明:

important: Success or failure is indicated by the return value of the method. Although Cocoa methods that indirectly return error objects in the Cocoa error domain are guaranteed to return such objects if the method indicates failure by directly returning nil or NO,you should always check that the return value is nil or NO before attempting to do anything with the NSError object.

我一直想知道为什么这种模式如此重要?我们为什么要一直检查返回值?如果我们检查错误是否为零,那有什么问题?

解决方法 这个设计并不是非常不寻常,比较标准C中的错误.

该设计具有许多潜在优势:

>该函数不必在成功时写入指针.这不仅使这些功能的实现更容易且更不容易出错,而且还可以是小的性能优势(例如,如果功能成功,这可以防止cpu缓存无效).
>如果我们在访问错误之前总是检查函数是否失败,我们可以将相同的错误指针用于多个函数.否则,我们可能会遇到先前的故障,而不是最近的功能失败.
>这使验证代码更容易编写.例如.函数可以默认设置错误.如果所有验证都通过,则该函数可以简单地返回成功,而不必重置错误变量.
>函数可以在调用其他函数时使用相同的错误指针,但这些帮助程序的失败并不一定意味着顶部函数的失败.

在您的特定情况下,变量NSError * theError;尚未初始化.访问该变量而不先分配它将调用未定义的行为.该文档仅保证在发生错误时设置变量.

总结

以上是内存溢出为你收集整理的objective-c – Apple检查返回值而非错误的模式背后理由是什么?全部内容,希望文章能够帮你解决objective-c – Apple检查返回值而非错误的模式背后的理由是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1071031.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存