客观上抛出异常

在objective-c / cocoa中引发异常的最佳方式是什么?


我使用[NSException raise:format:]如下:

[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];

这里谨慎的一句话。 在Objective-C中,与许多类似的语言不同,您通常应该尽量避免在正常操作中可能出现的常见错误情况中使用异常。

Obj-C 2.0的Apple文档声明如下:“重要:Objective-C中的异常是资源密集型的,不应该将异常用于一般的流程控制,或者仅仅表示错误(例如文件不可访问)”

Apple的概念性异常处理文档解释相同,但用更多的话来说:“重要:您应该保留使用异常编程或意外的运行时错误,如超出范围集合访问,试图改变不可变对象,发送无效消息,并且失去与窗口服务器的连接,你通常会在创建应用程序时而不是在运行时处理这些类型的错误[.....]而不是异常,错误对象(NSError)和可可错误传递机制是在Cocoa应用程序中传达预期错误的推荐方式。“

其原因部分是坚持Objective-C中的编程习惯用法(在更简单的情况下使用返回值,在更复杂的情况下使用引用参数(通常是NSError类)),部分原因是抛出异常和捕获异常更为昂贵,最后(并且最重要的是)说Objective-C异常是围绕C的setjmp()和longjmp()函数的一个简单包装,实质上是搞乱了你对内存的谨慎处理,请看这个解释。


@throw([NSException exceptionWith…])
链接地址: http://www.djcxy.com/p/35139.html

上一篇: throwing an exception in objective

下一篇: Are there constants in JavaScript?