我在Grand Central Dispatch Resource页面上看到了dispatch_block_t上的这段代码,我不太明白它是错还是错,为什么不对或错。
来源:
https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/
代码:
dispatch_block_t block;
if (x) {
block = ^{printf("true\n"); };
} else {
block = ^{printf("false\n"); };
}
block(); // unsafe!!
幕后发生的事情:
if (x) {
struct Block __tmp_1 = ...; // setup details
block = &__tmp_1;
} else {
struct Block __tmp_2 = ...; // setup details
block = &__tmp_2;
}
它说:
如示例所示,堆栈变量的地址是 逃避分配范围。
我很难理解为什么调用dispatch_block
(通过block()
)是不安全的?
有人可以帮忙吗?