Я хотел бы вернуть массив, содержимое которого было установлено во время блока 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];
}
Если яЯ не делаю копию полного массива, но вместо этого хочу добавить один за другим, могу ли я пропустить '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 для дальнейшего использования результата после завершения стека для этого метода?