A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© u37kl 中级黑马   /  2016-2-9 13:36  /  1031 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

int a = 0;
  blocks b=^{
NSLog(@"%d",a);
}
NSLog(@"%p",b);
}

4 个回复

倒序浏览
不好意思重新提问一遍:

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

  int a = 0;
  blocks b2=^{ NSLog(@"%d",a); }
  NSLog(@"%p",b);
}
当定义的block代码块中不使用外部变量时,在常量区;
当使用使用外部变量时,代码块变到堆区,这是怎么回事?
回复 使用道具 举报
所以说 变量存储在栈区
   而代码块的中的变量 存储在堆区
回复 使用道具 举报
不使用外部变量或只是用了外部静态变量的block是栈block,在栈区,相当于一个全局函数。如果使用了外部自动变量,则是堆block,在堆区
回复 使用道具 举报
学习了,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马