了解dispatch_block_t

时间:2016-03-29 16:30:48

标签: ios objective-c grand-central-dispatch objective-c-blocks

我在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())是不安全的?

有人可以帮忙吗?

0 个答案:

没有答案