美文网首页将来跳槽用
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全局变量和局部变量的引用

    1、全局变量,block可以进行读取和修改。 2、局部变量,block只能读取,不能修改局部变量。这个时候是值传递...

  • 全局变量和局部变量

    局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名...

  • python 变量进阶(理解)

    变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是...

  • 16 变量进阶(理解)

    变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是...

  • [Python基础]D9 变量的进阶

    变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是...

  • Python变量

    仅用学习参考 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存...

  • Python基础知识11: 变量的进阶

    一、主要内容 1.1、变量的引用 1.2、可变和不可变类型 1.3、局部变量和全局变量 二、变量的引用 2.1、变...

  • python 变量进阶

    目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的...

  • 02.1.Python变量续

    目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的...

  • 10.Python变量续

    目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的...

网友评论

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

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