Как прочитать значение NSArray в dispatch_async

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
            NSLog(@"count: %lu", (unsigned long)[[myClass getFinalPath]count]);
            dispatch_async(dispatch_get_main_queue(), ^(void){
                //Run UI Updates
            });
        });

Я пытаюсь прочитать значение NSArray, если я прочитал значение NSArray вне dispatch_async Я могу читать, но когда он внутри, он возвращает ноль, я очень плохо знаком с dispatch_async и у меня проблемы с пониманием учебников и справок от Apple, которые я прочитал, пожалуйста, если кто-нибудь может помочь. мой [myClass getFinalPath] возвращает NSArray, заполненный определенным количеством значения между прочим.

2 ответа

dispatch_async захватывает значения переменных в текущей области и выполняет код внутри блока "позже" асинхронно. Этот код

__block NSInteger i = 0;
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
  i = 10;
  NSLog(@"inside %ld", i);        
});
NSLog(@"outside %ld", i);  

логи всегда первыми outside 0, затем inside 10

Вы должны прочитать и обработать массив внутри блока отправки

Передать массив в качестве параметра функции

 (void)passArrayToDispatchSync:(NSArray *)someArray
 {
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
 NSLog(@"count: %lu", (unsigned long)[someArray count]);
dispatch_async(dispatch_get_main_queue(), ^(void){
                //Run UI Updates
            });
        });
 }
Другие вопросы по тегам