码迷,mamicode.com
首页 > 其他好文 > 详细

Block在内存中的位置在arc和mrc的区别

时间:2015-05-28 19:48:28      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

关于block在内存中的位置,

http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/这篇文章解释的不错,但是好像并没有区分arc和mrc的区别

block的位置分为这几种

  • NSGlobalBlock:类似函数,位于text段;
  • NSStackBlock:位于栈内存,函数返回后Block将无效;
  • NSMallocBlock:位于堆内存。

不引用外部环境变量的block都属于NSGlobalBlock, NSStackBlock和NSMallocBlock在arc和mrc下有所不同,mrc下引用外部环境变量的block属于NSStackBlock,对NSStackBlock的copy产生NSMallocBlock;而在arc下统一都是NSMallocBlock。

所以这样一段代码

    int (^plus1)(int a, int b)=^int(int a, int b){
        return a+b;
    };
    NSLog(@"plus1 = %@",plus1);

   int c = 100;

    int(^plus2)(int a, int b) = ^int(int a, int b){
        return c+a+b;
    };
    NSLog(@"plus2 = %@",plus2);

 arc下输出是:

plus1 = <__NSGlobalBlock__: 0x10a5ac350>

plus2 = <__NSMallocBlock__: 0x7fdecbf41270>

 

mrc下输出是:

 

plus1 = <__NSGlobalBlock__: 0x10f55b350>

plus2 = <__NSStackBlock__: 0x7fff50bdebe0>

 

 

Block在内存中的位置在arc和mrc的区别

标签:

原文地址:http://www.cnblogs.com/Kelphizy/p/4536500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!