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];
}
配列全体のコピーではなく、1 つずつ追加したい場合、戻り値の「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?
}
[NSMutableArray array] の割り当ては、このメソッドのスタックが完了した後に結果を継続して使用するために、dispatch_sync ブロック内で安全ですか?