dispatch_syncブロックで内容が設定された配列を返したいと思います。私は完全な配列のコピーをしているが、代わりに一つ一つを追加したい、私は「自動解放をスキップすることができていないよ場合__blocksとdispatch_sync内でオブジェクトを割り当てる
-(NSArray *)getSomeLockedList {
__block NSArray *resultList;
dispatch_sync(myQueue, ^{
// copy contents of my ivar NSMutableArray into return variable
resultList = [ivarContentList copy];
});
// add auto-release since a 'copy' was done within block
return [resultList autorelease];
}
:
私は一般的に見てきたコードは次のようなものです'戻り値ですか?スタックはこの方法のために完了した後
-(NSArray *)getSomeLockedList {
__block NSArray *someResultKeys; // is it ever safe to do the alloc here?
dispatch_sync(myQueue, ^{
someResultKeys = [NSMutableArray array];
for (id entry in ivarContentList) {
// do some work on entry instance
[someResultKeys addObject:entry];
}
});
return someResultKeys; // autorelease not necessary?
}
結果の継続的な使用のためのdispatch_syncブロック内の安全[NSMutableArrayの配列】割当か?
ブロックの前に変更可能な配列を作成し、ブロック内の項目を追加するだけです。その場合、 'someResultsKey'はブロック内で変更されないので' __block'宣言する必要はありません。 –
@ダニエルそれはおそらくこの特定のケースでは、それについて行くためのより良い方法です。 –