ブロック内のローカル変数(ivarを含む)への参照は、ブロックの実行中ずっと有効であるように自動的に保持されます。
self.message
そうは言っても、最初のブロックはそれを参照していませんが、2番目のブロックはそれを参照しているので、このコードは時期尚早の割り当て解除につながりますか?それとも、それを保持する必要があることを知るのに十分賢いですか?
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 */
}
});
});