以下は、GCD を使用してネットワークからデータをフェッチし、それをメイン キューの応答ブロックに渡すコードです。
+ (void)allData:(void(^)(NSArray*))responseBlock
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block NSArray *data = [[self all] retain]; // get data from network
dispatch_async(dispatch_get_main_queue(), ^{
responseBlock(data); // 2
});
});
}
[[self all] keep] は、オブジェクトが解放されないようにするためのものです。しかし今、responseBlock はそれを解放しなければなりません。これは正しい方法ですか?