黑马程序员技术交流社区

标题: 奇怪的块(block) [打印本页]

作者: xiniuniu    时间: 2014-9-13 16:08
标题: 奇怪的块(block)
  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似乎不起作用阿。 块依然可以正常使用, 莫非块的释放是不能手动进行的?????




作者: fantacyleo    时间: 2014-9-13 16:25
block也可以分配在栈上,这是编译器做出的优化。比如你这段程序中写在main方法里的block,main一结束,block的生命周期也到头了,放在堆上不是浪费嘛。
作者: xiniuniu    时间: 2014-9-13 20:19
fantacyleo 发表于 2014-9-13 16:25
block也可以分配在栈上,这是编译器做出的优化。比如你这段程序中写在main方法里的block,main一结束,bloc ...

OC隐藏了太多的东西了,啊啊!!
作者: zhuiyi007    时间: 2014-9-14 10:30
来看大婶的解答的
作者: 陨石    时间: 2014-9-15 15:45
感觉^块好像相当于一个临时函数,相当于C函数指针呢 ,不知道理解的对不对




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