Objective-C 为什么需要 __NSGlobalBlock__
Objective-C why need __NSGlobalBlock__
如果我的块不捕获变量,我会得到 __NSGlobalBlock__
。
Class class = [^{
} class];
NSLog(@"%@", NSStringFromClass(class));
但是如果我捕获变量,我会得到 __NSStackBlock__
int foo = 3;
Class class = [^{
int foo1 = foo;
} class];
NSLog(@"%@", NSStringFromClass(class));
为什么需要全局内存块?
__NSGlobalBlock__
与 __NSStackBlock__
相比有什么优势?
我读过 Block Implementation Specification,但我不明白为什么我需要 __NSGlobalBlock__
如果我只为一种用途创建块。
Global
和 Stack
指的是在定义块时捕获的数据所在的位置。如果块是 Global
,则运行时知道不需要进行进一步处理。 copy
之类的东西变成了空操作。如果块是 Stack
,则运行时知道如果数据在释放块之前超出范围,则需要移动数据。这对于 ARC 尤为重要。
如果我的块不捕获变量,我会得到 __NSGlobalBlock__
。
Class class = [^{
} class];
NSLog(@"%@", NSStringFromClass(class));
但是如果我捕获变量,我会得到 __NSStackBlock__
int foo = 3;
Class class = [^{
int foo1 = foo;
} class];
NSLog(@"%@", NSStringFromClass(class));
为什么需要全局内存块?
__NSGlobalBlock__
与 __NSStackBlock__
相比有什么优势?
我读过 Block Implementation Specification,但我不明白为什么我需要 __NSGlobalBlock__
如果我只为一种用途创建块。
Global
和 Stack
指的是在定义块时捕获的数据所在的位置。如果块是 Global
,则运行时知道不需要进行进一步处理。 copy
之类的东西变成了空操作。如果块是 Stack
,则运行时知道如果数据在释放块之前超出范围,则需要移动数据。这对于 ARC 尤为重要。