これが、メモリの問題やARCでのクラッシュを引き起こすことなく、ObjectiveCの同じ変数でネストされたブロックを機能させる正しい方法であるかどうか疑問に思いました。これは、ASIHttpRequestの完全なブロックで始まります。
MyObject *object = [dataSet objectAtIndex:i];
ASIHTTPRequest *request = [[ASIHTTPRequest alloc]initWithURL:@"FOO"];
__block MyObject *mutableObject = object;
[request setCompleteBlock:^{
mutableObject.data = request.responseData;
__block MyObject *gcdMutableObject = mutableObject;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
[gcdMutableObject doLongComputation];
dispatch_async(dispatch_get_main_queue(),^{
[self updateGUIWithObject:gcdMutableObject];
});
});
[request startAsynchronous];
私の主な関心事は、ディスパッチキューをネストし、前のキューの__blockバージョンを使用してデータにアクセスすることです。私がしていることは安全ですか?