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 */
}
});
});
我相信第一个块引用它,但不是明确的 - 它在外部范围内访问 - 这只是另一个细节,它也在第二个内部范围内。 – 2012-08-17 06:48:15
它与嵌套块一起工作,但保留'self',而不是'self.message'。 – 2012-08-17 07:05:53