代码之家  ›  专栏  ›  技术社区  ›  Adrian

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

  •  3
  • Adrian  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Georg Fritzsche    14 年前

    您可以在调用可能抛出的方法之前自动释放它—这样您就可以确保无论是否抛出异常,它都会被释放。

    @finally 1 :

    A @最后

    请注意,使用 @最后 @catch 很好:

    Resource *resource = [[Resource alloc] init];
    @try {
        [obj someMethodThatMayThrow];
    }
    @finally {
        [resource release];
    }
    
        2
  •  2
  •   bbum    14 年前

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

    这就是跨框架和系统采用的Cocoa设计模式。如果决定对流控制使用异常,则:

    • 如果有的话 任何

    使用Mac OS X和iOS中的例外 仅表示编程器错误 ; 表示应用程序已进入无法恢复的状态。不要浪费时间试图支持超出该模式的异常,您只会浪费时间,创建与系统框架不一样的代码。

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