Ans*_*sig 27 iphone error-handling exception-handling objective-c try-catch
如果这个问题已经在其他地方得到解答,请道歉,但在搜索时我找不到任何决定性的答案:
我想知道try-catch块何时用于objective-c iPhone应用程序.Apple的"Objective-C编程语言简介"指出异常是资源密集型的,并且应该"不使用异常来进行一般的流量控制,或者只是表示错误".通过阅读这里的一些相关问题,我还得知人们并不经常在实践中使用这种方法.
所以我想问题是:在为iPhone/Objective-C开发时使用try-catch块是否合适的情况是什么时候应该绝对不使用?
例如,在处理数组中的对象时,我可以使用它们来捕获超出边界和其他异常.我有一个方法,执行很少的任务与在多个数组中传递的对象.如果发生错误,该方法返回nil,try-catch块可以帮助我捕获异常.但是,我当然可以在这里和那里简单地编写一些if-tests,以确保我,例如,永远不会尝试访问超出数组边界的索引.在这个情况下,你会怎么做?
非常感谢!
bbu*_*bum 28
只使用@ try/@ catch来处理不可恢复的错误.使用@ throw/@ try/@ catch来执行类似操作的控制流是不合适的.
特别是,除非你的目标是捕获它们并以某种方式报告错误,否则用于捕获越界异常是不合适的 - 然后 - 通常 - 崩溃或至少警告用户你的应用程序处于不一致状态,可能会丢失数据.
通过系统框架代码抛出的任何异常的行为都是未定义的.
您进行边界检查的if-test是一个更合适的解决方案.
Bar*_*ark 19
@ bbum的答案是绝对正确的(他会比大多数人更了解答案).详细说明......
在Cocoa中,通常应避免使用exception(@try/@catch[/@finally])进行流控制.正如您所提到的,异常带来了非常大的成本(与运行时相比,例如JVM或针对异常使用而优化的CLR).此外,大多数Cocoa框架都不是例外.因此,通过Cocoa框架代码抛出异常是危险的,并且可能会导致应用程序中的奇怪,难以诊断和灾难性(认为可能的数据丢失)错误.
Cocoa代码用于NSError表示在应用程序中可恢复的错误条件,而不是使用异常.例外用于表示应用程序无法恢复的条件.因此,在尝试访问给定的越界位置时,可以用错误(向用户呈现其请求无法完成的原因)发信号通知请求模型阵列中的越界位置的UI组件.你认为应该有效的索引表示你的应用程序处于不一致状态并且应该在它可以造成更多伤害之前尽快死亡的异常情况.
NSParameterAssert例如,NSException当断言失败时的信号.
那么什么时候应该使用例外或@try/@catch?如果您正在使用一个使用异常的C/C++库,那么您应该先捕获这些异常,然后才能通过Cocoa代码抛出这些异常.同样,如果您认真对待应用程序中状态的一致性,则应在检测到状态不一致(且不可恢复)时立即引发异常.
| 归档时间: |
|
| 查看次数: |
12320 次 |
| 最近记录: |