如何在dispatch_async中读取NSArray值

时间:2015-09-28 07:43:54

标签: ios objective-c grand-central-dispatch 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值,如果我在dispatch_async之外读取NSArray值我能够读取它但是当它在里面它返回零时,我对dispatch_async我很新。我在阅读Apple的教程和参考资料方面遇到了问题,如果有人可以提供帮助的话。我的[myClass getFinalPath]返回一个充满了一定数量btw的NSArray。

2 个答案:

答案 0 :(得分:0)

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

您必须在调度块

中读取和处理数组

答案 1 :(得分:0)

将数组作为参数传递给函数

 (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
            });
        });
 }