以下是我使用 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] retain] 是为了防止对象被释放。但是现在 responseBlock 必须释放它。这是正确的方法吗?