加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在什么情况下,在Cocoa的try / catch / finally中

发布时间:2020-12-16 03:04:49 所属栏目:百科 来源:网络整理
导读:考虑下面的 Cocoa / Obj-C代码片段: MyClass *obj;@try { [obj doSomething];}@catch (NSException * e) { NSLog(@"Exception occurred: %@",[e description]);}@finally { [obj cleanUp];} 和 MyClass *obj;@try { [obj doSomething];}@catch (NSException
考虑下面的 Cocoa / Obj-C代码片段:
MyClass *obj;
@try {
    [obj doSomething];
}
@catch (NSException * e) {
    NSLog(@"Exception occurred: %@",[e description]);
}
@finally {
    [obj cleanUp];
}

MyClass *obj;
@try {
    [obj doSomething];
}
@catch (NSException * e) {
    NSLog(@"Exception occurred: %@",[e description]);
}
[obj cleanUp];

在什么情况下第一个片段会导致[obj cleanUp]被调用,而第二个不会导致[obj cleanUp]被调用?换句话说,在使用Cocoa异常处理时,在什么情况下@finally是非冗余的?

解决方法

在这种情况下,您在哪里挤压异常,没有. @finally用于清理当您没有捕获异常或者重新抛出异常时,无论在哪一种情况下,都会对调用代码留下最终的异常响应.由于Cocoa中的异常只能用于编程错误,因此很少发生,这是一个完全合理的事情.

还要指出一种情况,您不需要使用@finally,当您设置自己的自动释放池时.当“父”自动释放池被销毁时,任何尚未清理的内部池也将被释放.如果您尝试自己清理,您需要将自己的异常本身从您的自动释放池中引出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读