黑马程序员技术交流社区

标题: block代码块问题 [打印本页]

作者: u37kl    时间: 2016-2-9 13:36
标题: block代码块问题
typedef void (^blocks);
void main(){
  blocks b=^{
}
NSLog(@"%p",b);

int a = 0;
  blocks b=^{
NSLog(@"%d",a);
}
NSLog(@"%p",b);
}
作者: u37kl    时间: 2016-2-9 13:41
不好意思重新提问一遍:

typedef void (^blocks);
void main(){
  blocks b1=^{  }
  NSLog(@"%p",b);

  int a = 0;
  blocks b2=^{ NSLog(@"%d",a); }
  NSLog(@"%p",b);
}
当定义的block代码块中不使用外部变量时,在常量区;
当使用使用外部变量时,代码块变到堆区,这是怎么回事?

作者: 学以致用表初衷    时间: 2016-2-9 15:47
所以说 变量存储在栈区
   而代码块的中的变量 存储在堆区
作者: Tmac90301    时间: 2016-2-9 16:15
不使用外部变量或只是用了外部静态变量的block是栈block,在栈区,相当于一个全局函数。如果使用了外部自动变量,则是堆block,在堆区
作者: hezerongrocky    时间: 2016-2-9 21:52
学习了,赞一个




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