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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiniuniu 中级黑马   /  2014-9-13 16:08  /  1708 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. // 全局块
  2. void(^globalBlock)()=^{

  3.         NSLog(@"global Block!!!");
  4. };

  5. int main()
  6. {
  7.     // 局部块
  8.         void(^localBlock)()=^{
  9.                 NSLog(@"local Block!!!");
  10.         };
  11.        
  12.         // 堆块
  13.         void (^heapBlcok)() = [^{ NSLog(@"heap block!!!");} copy];
  14.        
  15.         return 0;
  16. }
复制代码



看《effective oc..》书上说 块也是对象, 块分为全局块,局部块(就是在栈上分配的块),和堆块(在堆上分配的);既然是对象,那数据肯定是分配在堆上的。又何来 局部块和堆块区别呢? 也就是存放对象变量存放位置不一样罢了。使用时也没太大区别啊

另代码测试还有一些奇怪现象, 对块进行手工release似乎不起作用阿。 块依然可以正常使用, 莫非块的释放是不能手动进行的?????



评分

参与人数 1技术分 +1 收起 理由
★彬★卍囧神 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
block也可以分配在栈上,这是编译器做出的优化。比如你这段程序中写在main方法里的block,main一结束,block的生命周期也到头了,放在堆上不是浪费嘛。
回复 使用道具 举报
fantacyleo 发表于 2014-9-13 16:25
block也可以分配在栈上,这是编译器做出的优化。比如你这段程序中写在main方法里的block,main一结束,bloc ...

OC隐藏了太多的东西了,啊啊!!
回复 使用道具 举报
来看大婶的解答的
回复 使用道具 举报
感觉^块好像相当于一个临时函数,相当于C函数指针呢 ,不知道理解的对不对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马