首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS面试题-ARC下如何创建栈上的Block

iOS面试题-ARC下如何创建栈上的Block

作者头像
大壮
发布2020-04-16 17:23:21
1.1K1
发布2020-04-16 17:23:21
举报
文章被收录于专栏:大壮大壮

这题主要是考察如何区分栈,堆,还是全局? 其中栈上block的定义:只用到外部局部变量、成员属性变量,且没有强指针引用的block都是StackBlock。 所以

    __block int static_k = 3;
    __weak void (^myBlock)(void) = ^{
        static_k++;
    };
    myBlock();
    NSLog(@"%@",myBlock);

这种一定是栈上的。 然后在ARC上当block捕获到自动变量时,系统就是自动给block copy一次。所以为了避免这次copy还有2种情况。

    int temp = 10;
    NSLog(@"%@",
          ^(){
        NSLog(@"%d",temp);
    });

当block是方法的参数时,系统不会触发copy操作。

- (void)viewDidLoad {
    int val = 10;
    [self testMethod:^(int num) {
        NSLog(@"val=%d",val);
    }];
}

- (void)testMethod:(void (^)(int num))block {
    NSLog(@"%@",block);
}

引用 第一章:基础概念和使用 第二章:捕获变量 第三章:持有变量

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档