标签:
关于block在内存中的位置,
http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/这篇文章解释的不错,但是好像并没有区分arc和mrc的区别
block的位置分为这几种
不引用外部环境变量的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>
标签:
原文地址:http://www.cnblogs.com/Kelphizy/p/4536500.html