美文网首页
iOS面试题-ARC下如何创建栈上的Block

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

作者: userName | 来源:发表于2020-04-13 15:40 被阅读0次

    这题主要是考察如何区分栈,堆,还是全局?
    其中栈上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);
    }
    

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

    相关文章

      网友评论

          本文标题:iOS面试题-ARC下如何创建栈上的Block

          本文链接:https://www.haomeiwen.com/subject/vvtnmhtx.html