Как прочитать значение 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
});
});
}