如果我的代码块没有捕获变量,我会得到__NSGlobalBlock__
。
Class class = [^{
} class];
NSLog(@"%@", NSStringFromClass(class));
但是如果我捕获变量,我得到 __NSStackBlock__
int foo = 3;
Class class = [^{
int foo1 = foo;
} class];
NSLog(@"%@", NSStringFromClass(class));
为什么需要在全局内存中进行阻止?__NSGlobalBlock__
vs有什么优势__NSStackBlock__
?
我阅读了《块实现规范》,但是我不明白为什么__NSGlobalBlock__
我只为一种用法创建块。
Global
并Stack
参考在定义块时捕获的数据所在的位置。如果是块,则Global
运行时将知道无需进行进一步处理。诸如此类的事情copy
成为空手。如果该块为Stack
,则运行时将意识到,如果在释放该块之前数据将超出范围,则需要移动数据。这对于ARC特别重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句