美文网首页ios
IOS面试题(block相关) --- block基础

IOS面试题(block相关) --- block基础

作者: ShawnAlex | 来源:发表于2022-07-07 08:53 被阅读0次

    OC面试题目合集地址

    问题1: block的分类

    • NSGlobalBlock:全局block
      • 全局区
      • 在 Block内部不使用外部变量,或者只使用静态变量和全局变量。
    • NSMallocBlock:堆block
      • 堆区
      • 在Block内部使用局部变量或者OC属性,并且赋值给强引用或者copy修饰的变量。
    • NSStackBlock: 栈block
      • 栈区
      • NSMallocBlock,可以在内部使用局部变量或者OC属性。但是不能赋值给强引用或者copy 修饰的变量。

    问题2: 什么是 block

    block 是将函数及其执行上下文封装起来的对象


    问题3: 什么是 block调用

    block 调用即是函数调用


    问题4: 什么场景需要 __block

    通常被截获变量需要赋值操作时候需要添加 __block 修饰符


    问题5: 看例子回答结果

        NSMutableArray *arr = [NSMutableArray array];
        
        void(^Block)(void) = ^{
            [arr addObject:@"123"];
        };
        
        Block();
        
        NSLog(@"%@", arr);
    

    答案

    ["123"]

    block正常截获变量 arr, 再进行插入"123" 操作, 结果 ["123"]


    验证

    问题6: 看例子回答结果

        NSMutableArray *arr = [NSMutableArray array];
        
        void(^Block)(void) = ^{
            
            arr = [NSMutableArray arrayWithArray:@[@"123"]];
        };
        
        Block();
        
        NSLog(@"%@", arr);
    

    答案

    报错, 缺少__block

    与问题5的的区别

    • 问题5: arr 进行了使用操作
    • 问题6: arr 进行了赋值操作

    block进行赋值操作使用操作是不一样的, 赋值操作 局部变量定义时候需要__block 修饰

    验证

    问题7: 什么时候需要__block修饰? 什么时候不需要需要__block修饰?

    赋值操作

    • 需要:
      • 基础数据变量
      • 对象类型变量
    • 不需要:
      • 静态变量
      • 全局静态变量
      • 静态局部变量

    相关文章

      网友评论

        本文标题:IOS面试题(block相关) --- block基础

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