Из того, что я понял, можно сделать доступный объект между блоками (и очередями?) С помощью модификатора __block.Пропуск типов значений между блоком
-(void)performRequest: (void (^)(NSArray* outcome))completion
{
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do some request
__block NSArray * result = [[NSArray alloc]init]; //Outcome of the request.
completion(result);
});
}
Давайте предположим, что блок завершения будет dispatch_async на главном потоке
Я предполагаю, что это должно быть возможно сделать это с типами значений без идентификатора __block. Я прав?
-(void)performRequest: (void (^)(int outcome))completion
{
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do some request
int result = 10; //Outcome of the request.
completion(result);
});
}
Как ваш пример 1 и 2 похожи? В первом случае любое изменение результата 'result' будет отображаться на' result'. Во втором вы передаете '10' непосредственно в блок. 'result' не будет изменен вообще, независимо от того, что вы делаете в блоке завершения. – iDev
@ABC - Отредактированный вопрос – johan
Вам необходимо проверить http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/Blocks/Articles/bxVariables.html – iDev