1

对块内的局部变量(包括 ivars)的引用会自动保留,以确保它在整个块的执行过程中保持有效。

也就是说,这段代码是否会导致 的过早释放self.message,因为第一个块没有引用它,即使第二个块引用它?还是它足够聪明,知道应该保留它?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    /* snip */
    dispatch_async(dispatch_get_main_queue(), ^{
        if ([self.message.ID isEqualToString:@"foobar"]) {
            /* snip */
        }
    });
});
4

1 回答 1

3

块捕获其中的所有变量,包括嵌套块。简而言之:它做了“正确”的事情。

在这种特殊情况下,请注意它self正在被捕获,而不是self.message.

于 2012-08-17T07:07:40.320 回答