由于Objective-C中的异常,我应该如何处理可能的内存泄漏?

时间:2010-06-20 23:36:14

标签: objective-c exception-handling

我有一个方法,它分配一个对象,然后在最后释放它。在这两者之间,该方法调用另一个可能引发异常的方法,异常可能会被调用my方法的方法捕获。如果发生这种情况,对象将永远不会被释放(或者它会被释放?)。我应该如何防止这种情况发生?

2 个答案:

答案 0 :(得分:2)

在调用可能抛出的方法之前,你总是可以自动释放它 - 这样你可以确定它会被释放,而不会抛出异常。

如果出于某种原因这是不合理的,您可以在@finally 1 中进行发布:

  

@finally块包含无论是否抛出异常都必须执行的代码。

请注意,使用不包含@finally的{​​{1}}块是正常的:

@catch

答案 1 :(得分:2)

除了致命,不可恢复,错误之外,不要抛出异常

这是框架和系统中使用的Cocoa设计模式。如果您决定要使用流程控制的例外,那么:

  • 你反对Cocoa模式,你的代码将在系统API中不合适

  • 如果在引发异常的系统框架中有任何框架,这些框架将处于未定义状态

    < / LI>

Mac OS X和iOS中的例外仅用表示程序员错误;表示应用程序已进入无法恢复的状态。不要浪费你的时间来尝试支持超出该模式的异常,你只会浪费你的时间并创建不像系统框架那样工作的代码。

请注意,在iOS上抛出异常实际上非常昂贵(CPU和内存)。同样,@ finally也不是免费的,尽管@finally的开销相对较小。