黑马程序员技术交流社区

标题: block [打印本页]

作者: qinyawan    时间: 2015-11-24 14:18
标题: block

当block时,如果里面用到外部变量,会先把外部变量从栈区【以const的方式拷贝】到【堆区(block是对象,一般在堆区)】。因此可以访问外部变量的值,但是无法改变外部变量的值。

【例如】
  • //定义一个外部变量
  •     int sum = 2;
  •     //定义一个有参有返回值的block的别名
  •     typedef int (^myBlock)(int, int);
  •     //此时myBlock是一个类型,不再是一个单纯的变量了
  •     NSLog(@"sum = %p",&sum);//此时sum在栈区
  •     //当block时,如果里面用到外部变量,会先把外0部变量从栈区【以const的方式拷贝】到【堆区(block是对象,一般在堆区)】。
  •     myBlock b1 = ^(int a, int b){
  •         NSLog(@"sum = %p",&sum);//此时的地址不在栈区,而在堆区
  •         //sum = a + b;//不能改变sum的值,会报错
  •         //可以外部变量sum的值
  •         return sum + a + b;
  •     };
  •     NSLog(@"sum = %p",&sum);//此时sum在栈区
  •     NSLog(@"a + b = %d", b1(1,2));
  •     NSLog(@"sum = %p",&sum);//此时sum在栈区

[color=rgb(177, 8, 0) !important]复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2