我有一个方法,它分配一个对象,然后在最后释放它。在这两者之间,该方法调用另一个可能引发异常的方法,异常可能会被调用my方法的方法捕获。如果发生这种情况,对象将永远不会被释放(或者它会被释放?)。我应该如何防止这种情况发生?
答案 0 :(得分:2)
在调用可能抛出的方法之前,你总是可以自动释放它 - 这样你可以确定它会被释放,而不会抛出异常。
如果出于某种原因这是不合理的,您可以在@finally
块 1 中进行发布:
@finally
块包含无论是否抛出异常都必须执行的代码。
请注意,使用不包含@finally
的{{1}}块是正常的:
@catch
答案 1 :(得分:2)
这是框架和系统中使用的Cocoa设计模式。如果您决定要使用流程控制的例外,那么:
你反对Cocoa模式,你的代码将在系统API中不合适
如果在引发异常的系统框架中有任何框架,这些框架将处于未定义状态
< / LI>Mac OS X和iOS中的例外仅用表示程序员错误;表示应用程序已进入无法恢复的状态。不要浪费你的时间来尝试支持超出该模式的异常,你只会浪费你的时间并创建不像系统框架那样工作的代码。
请注意,在iOS上抛出异常实际上非常昂贵(CPU和内存)。同样,@ finally也不是免费的,尽管@finally的开销相对较小。