8
|
Todd Ditchendorf · 技术社区 · 15 年前 |
1
16
你应该
绝对避免例外
用于从字符串解析数字之类的事情。在Objective-C中,异常表示程序员错误,而不是用户输入错误,甚至是不可用的文件。(部分原因是异常处理总是比更“常规”的错误处理成本更高、更复杂
entering
从…起 Apple's own docs
看看内置的Cocoa类如何处理这样的错误。例如
NSString
有这样的方法
除了Obejctive-C约定和最佳实践之外,NSError比NSException更健壮、更灵活,并且允许调用方在需要时有效地忽略问题。我建议通读这本书
Error Handling Programming Guide For Cocoa
.
注:
如果你接受
尽管移植的代码可能最终看起来与Java代码完全不同,但要认识到Objective-C代码将使用它,而不是Java等价物的相同客户端。绝对符合语言的习惯用法。端口将不会是Java代码的镜像,但结果会更正确(对于Objective-C)。 |
2
7
在Cocoa中,异常实际上只用于“编程错误”;其原理是让应用程序捕捉它们,让用户选择保存正在执行的操作,然后退出。首先,并非所有框架或代码路径都是100%异常安全的,因此这可能是唯一安全的操作过程。对于可以预期并从中恢复的错误,应该使用NSError,通常是通过out参数。 |
3
3
您正确地认为“对于ObjC,输出错误通常是更好的解决方案”。在Cocoa中很少会发现抛出异常的API(除非您没有满足API的先决条件,但在这种情况下,默认情况下行为是未定义的)。 如果您希望此代码超出您的范围,并被其他Cocoa开发人员采用,我建议使用out错误。我从事的代码是由不熟悉Cocoa的人构建的,他们大量使用异常,解决异常是一件非常痛苦的事情。 |
4
2
我非常喜欢Objective-C使用的输出错误方法。您必须处理异常,但如果愿意,您可以选择忽略错误。它完全符合Objective-C的态度,即“程序员知道他们在做什么”。它还使Objective-C成为一种外观非常干净的语言,因为您的代码没有被try-catch块弄乱。 也就是说,您可能需要考虑:是否存在忽略异常的场景?你抛出的异常是真的吗 批评的 ? 您是否发现自己正在编写简单的catch块来清理变量并继续?我倾向于排除错误,因为我喜欢语法,Objective-C只为最关键的错误保留例外。 |
5
2
看起来这些已检查的异常更清楚地映射出错误。例外情况仍然可以使用,但应为特殊情况保留。 |
6
-1
异常可能是最好的方法,因为64位Obj-CABI(运行时)使用零成本异常,所以您可以在不需要实际成本的情况下获得更干净的代码。当然,在32位中,旧的SETJMP/LangJMP异常仍然在使用,它们不与C++交互,所以如果这是一个目标,那么你就有问题了。 |
user70192 · 在JavaScript中实现接口 9 年前 |
fkl · 3.x内核中守护进程()内核api的替换是什么 10 年前 |
Abhijit · 澄清:移植32到64位 11 年前 |
Matthew · 如何将Format函数从VB更新为VB.NET 12 年前 |