前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Objective-C中实现Swift中的defer

Objective-C中实现Swift中的defer

作者头像
韦弦zhy
发布2019-12-26 17:52:14
1.3K0
发布2019-12-26 17:52:14
举报
Swift中有一个defer

A defer statement is used for executing code just before transferring program control outside of the scope that the defer statement appears in.

defer 所声明的 block 会在当前代码执行退出后被调用。正因为它提供了一种延时调用的方式,所以一般会被用来做资源释放或者销毁,这在某个函数有多个返回出口的时候特别有用。

Objective-C Swift

在OC中也有一个类似的方法:__attribute__((cleanup(...)))

这个方法可以在作用域结束的时候执行指定的方法:

{
    ...
    NSString *testCleanString __attribute__((cleanup(printTestString))) = @"作用域结束";
}

void printTestString(NSString **string){
        NSLog(@" 打印信息string:%@",*string);
}
//输出结果为
打印信息string:作用域结束

可以传递一个block,实现类似Swift中的defer:

- (void)defer:(void (^)(void))block {
    __strong void(^deferBlock)(void) __attribute__((cleanup(blockCleanUp), unused)) = block;
}

static void blockCleanUp(__strong void(^*deferBlock)(void)) {
    if (*deferBlock) {
        (*deferBlock)();
    }
}

将其设置为NSObject类的一个扩展方法的话则可以这样使用:

{
    [self defer:^{
         NSLog(@"作用域结束");
    }];
  ...
  ...
}
```![066c5c571bd5245b58de320272fa571f.jpg](https://upload-images.jianshu.io/upload_images/2955252-7c9488cfb6e44a8a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Swift中有一个defer
  • 在OC中也有一个类似的方法:__attribute__((cleanup(...)))
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档