objective-c - @autorelease 指令和异常处理

标签 objective-c exception code-generation

- (void)foo
{
    @try {
         for (id o in os){
             @autoreleasepool {
                 for (id o2 in moreOs){
                       // create a lot of autoreleased objects.
                 }
                //exception raised
            }
        }

    }
    @catch (NSException *exception) {
     // handle the exception   
    }
}
  1. 如果发生异常,编译器会重写上述代码以排空池还是会泄漏?

  2. 如果编译器确实重写了它,它将如何重写?

最佳答案

不会耗尽水池。来自 Transitioning to ARC Release Notes :

On entry, an autorelease pool is pushed. On normal exit (break, return, goto, fall-through, and so on) the autorelease pool is popped. For compatibility with existing code, if exit is due to an exception, the autorelease pool is not popped.

关于objective-c - @autorelease 指令和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480624/

相关文章:

ios - 将插页式广告添加到 chartboost

php脚本不会抛出异常

java - 无法实例化默认的 tuplizer 异常

javascript - 为什么 GWT 和 Script# 风格的框架没有成为主流?

java - 内联领域特定语言以生成 Java 代码

c# - xsd.exe 生成类的可空值

objective-c - AVCaptureDevice 的 USB 接口(interface)

ios - 视频/电影播放时间

ios - iOS 中的 GCD 总是创建新线程

java - catch语句的顺序?