代码之家  ›  专栏  ›  技术社区  ›  Cajunluke Martijn Courteaux

Java转换为ObjytoC:异常处理

  •  1
  • Cajunluke Martijn Courteaux  · 技术社区  · 14 年前

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

    我熟悉常规的Objective-C代码中的异常用例;也就是说,只针对真正的异常错误。如果我不能在这里得到明确的答案,我可能会使用nserrrors。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Jonathan Grynspan    14 年前

    在Objective-C中抛出和捕获异常非常昂贵(在32位Mac OS X上除外,其中 @try 异常捕获代码的一部分是昂贵的部分,而不是 @catch 部分)

    您最好在某些机制中返回错误代码(例如 NSError ,在objective-c)中实现它的OO方法),让这些冒泡到访问您的框架的代码,然后让 那个 代码处理得当。

    在任何一个系统出错的情况下,内存清理都不应该是一个巨大的问题,因为您应该能够将大多数对象和分配放在自动释放池中。不过,请注意,游泳池会把任何 恩塞罗 NSException 对象是在其作用域内创建的,因此您必须确保这些对象在代码结束后仍然存在,并附加保留和释放。(稍微偏离主题,但我看到很多人在处理错误时把这部分搞砸了。)

        2
  •  2
  •   Jeremy W. Sherman    14 年前

    如果库能够自己处理所有异常,那么它们就不是客观的异常了——从字面意义上来说:没有发生程序员错误;相反,已经发生了完全预料到的事情。您应该使用错误代码/ NSError 根据需要,但是您可能能够处理异常提供的大部分信息,并且只返回一个指示“错误”的值。( nil 0,以及 NSNotFound 做一些普通人)并处理好。您还可以考虑处理委托方法时的错误。

        3
  •  1
  •   Pablo Santa Cruz    14 年前

    我只返回Objective-C库的错误(nsError方法)。毕竟,这是错误处理的方式 C .

        4
  •  1
  •   JeremyP    14 年前

    我不会太担心使用或不使用异常。如果它使代码更干净,就使用它们。您真正需要注意的是,不要通过不知道的代码抛出异常,这是异常安全的,几乎是您没有编写的所有代码。

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