Objective-C为什么需要__NSGlobalBlock__

阿吉尼克斯

如果我的代码块没有捕获变量,我会得到__NSGlobalBlock__

Class class = [^{
} class];
NSLog(@"%@", NSStringFromClass(class));

但是如果我捕获变量,我得到 __NSStackBlock__

int foo = 3;
Class class = [^{
    int foo1 = foo;
} class];
NSLog(@"%@", NSStringFromClass(class));

为什么需要在全局内存中进行阻止?__NSGlobalBlock__vs有什么优势__NSStackBlock__

我阅读了《块实现规范》,但是我不明白为什么__NSGlobalBlock__我只为一种用法创建块。

阿维

GlobalStack参考在定义块时捕获的数据所在的位置。如果是块,则Global运行时将知道无需进行进一步处理。诸如此类的事情copy成为空手。如果该块为Stack,则运行时将意识到,如果在释放该块之前数据将超出范围,则需要移动数据。这对于ARC特别重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是Objective C ++?

来自分类Dev

为什么需要在Objective-C中使用@property关键字?

来自分类Dev

Objective-c:为什么Core Foundation变量需要在ARC中显式发布?

来自分类Dev

为什么在将其强制转换为void *类型之前需要复制Objective-C处理程序?

来自分类Dev

为什么Objective-C编译器需要知道方法签名?

来自分类Dev

为什么在Swift项目中需要Objective-C桥接头?

来自分类Dev

为什么需要在Objective-C的头文件中使用“外部静态”来定义常量?

来自分类Dev

为什么Objective-C需要2010年后的Mac?

来自分类Dev

Objective-C,为什么我需要在这里而不是在这里放星号

来自分类Dev

为什么Objective-C数组参数不使用冒号?

来自分类Dev

为什么Objective-C异常不友好?

来自分类Dev

为什么这个Objective-C ++程序不能编译?

来自分类Dev

为什么CGBitmapInfo删除了Objective-C中的kCGBitmapByteOrderDefault?

来自分类Dev

Objective C故事板为什么ParentViewController为零

来自分类Dev

从Objective C调用C ++

来自分类Dev

Objective C 内存管理

来自分类Dev

Objective C结构语法

来自分类Dev

UISegmentedControl - Objective-C

来自分类Dev

委托Objective-C

来自分类Dev

对于..在objective-c

来自分类Dev

Objective C Converter应用

来自分类Dev

Objective-C:UILocalNotification

来自分类Dev

Objective C 中的“for in”协议

来自分类Dev

在Objective C的iPhone开发中什么是“代表”?

来自分类Dev

Objective C 的文件格式是什么?

来自分类Dev

Objective-C RTMP连接

来自分类Dev

递归方法Objective-C

来自分类Dev

Objective-C:GUI褪色

来自分类Dev

Objective C协议泛型