美文网首页将来跳槽用
iOS-block全局变量和局部变量的引用

iOS-block全局变量和局部变量的引用

作者: 爱恨的潮汐 | 来源:发表于2019-06-06 19:13 被阅读19次

    1、全局变量,block可以进行读取和修改。

    @interface ViewController () {
        NSInteger num;
    } 
    
    @implementation ViewController 
    - (void)viewDidLoad { 
        //1、block修改成员变量
        void (^block1)() = ^(){ 
            ++num;
            NSLog(@"调用成员变量: %ld", num);
        };
        block1();
    }
    

    2、局部变量,block只能读取,不能修改局部变量。这个时候是值传递,如果想修改局部变量,要用__block来修饰,这个时候是引用传递。下面会聊下block的实现原理:
    看例子:

     //1、调用局部变量,不用__block
      NSInteger testNum = 10; 
      void ( ^ blockNum )() = ^() { 
            //testNum = 1000; 这样是编译不通过的
            NSLog(@"修改局部变量: %ld", testNum);    //打印:10
      };
    
       testNum = 20;
       blockNum();
       NSLog(@"testNum最后的值: %ld", 20);           //打印:30 
    
      //2、修改局部变量,要用__block
      __block NSInteger testNum2 = 10; 
      void (^blockNum2)() = ^() {
            NSLog(@"读取局部变量: %ld", testNum2);   //打印:20
            testNum2 = 1000;
            NSLog(@"修改局部变量: %ld", testNum2);   //打印:1000
       };
        testNum2 = 20;
        blockNum2();
        testNum2 = 30;
        NSLog(@"testNum最后的值: %ld", testNum2);  //打印:30
    

    参考地址

    相关文章

      网友评论

        本文标题:iOS-block全局变量和局部变量的引用

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