繁体   English   中英

将Java转换为Objective-C:异常处理

[英]Converting Java to Objective-C: Exception Handling

我正在将Java库转换为Objective-C。 Java代码公然使用异常(在我的Objective-C习惯上)。 转换时,我应该抛出Objective-C异常(仅在库中;我会在它们离开之前捕获它们)还是应该使用NSError构造。

我熟悉常规Objective-C代码中的异常用例; 即仅针对真正的异常错误。 如果这里没有明确的答案,则可能会使用NSErrors。

如果库可以独自处理所有异常,那么从Objective-C的意义上来说,它们并不是真正的异常:没有发生程序员错误;它没有发生。 相反,发生了完全预期的事情。 您应该根据需要使用使用错误代码/ NSError ,但是您可以处理掉异常提供的许多信息,而只返回一个表示“错误”的值( nil ,0和NSNotFound是一些常见的)并处理。 您可能还会考虑错误处理委托方法。

在Objective-C投掷和捕获异常是昂贵的(除了在32位的Mac OS X,其中@try异常醒目代码的一部分是昂贵的部分,而不是@catch一部分)。

最好不要以某种机制返回错误代码(例如NSError ,这是在Objective-C中使用的OO方法。)让它们冒泡到访问您框架的代码,然后让代码适当地对其进行处理。

在任何一个系统发生错误的情况下,内存清理都不必担心,因为您应该能够将大多数对象和分配放入自动释放池中。 但是,请注意,该池将吞噬在其范围内创建的所有NSErrorNSException对象,因此您必须确保这些对象能够在代码末尾继续生存,并具有额外的保留和释放。 (稍微偏离主题,但是我已经看到很多人在执行错误处理时把这部分搞砸了。)

我只会在Objective-C库上返回错误(NSError方法)。 毕竟,这是在C中完成错误处理的方式。

我不会担心使用或不使用异常。 如果它使您的代码更整洁,请使用它们。 您真正需要注意的唯一事情就是不要通过您不知道的异常安全代码抛出异常,这几乎是您未编写的所有代码。

是的,使用异常的代价很高,但是担心这是过早优化的一个例子。 毕竟,与C函数调用相比,Objective-C消息的分发是昂贵的,但是您不会听到Objective-C程序员说“不要使用Objective-C消息”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM