iOS-在Dispatch\u async中从块获取值的大型中央调度

iOS-在Dispatch\u async中从块获取值的大型中央调度,ios,return-value,grand-central-dispatch,Ios,Return Value,Grand Central Dispatch,我用下面的代码从网上下载了一些数据。我需要像以前那样保留数据,这对吗?块内部的NSLog语句也显示数组已填充,但当我在块外部运行NSLog时,数组显示为null。如何在dispatch\u async方法之外保存数据 __block NSArray *downloadedCareerIds; __block NSArray *diskCareerIds; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR

我用下面的代码从网上下载了一些数据。我需要像以前那样保留数据,这对吗?块内部的NSLog语句也显示数组已填充,但当我在块外部运行NSLog时,数组显示为null。如何在dispatch\u async方法之外保存数据

    __block NSArray *downloadedCareerIds;
    __block NSArray *diskCareerIds;

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        /* Download stuff */

        downloadedCareerIds = [[CareersParser idsFrom:@"web"] retain];
        diskCareerIds = [[CareersParser idsFrom:@"disk"] retain];

        DLog(@"downloadedCareerIds: %@", downloadedCareerIds);

        DLog(@"diskCareerIds: %@", diskCareerIds);

    });


    DLog(@"downloadedCareerIds: %@", downloadedCareerIds);

    DLog(@"diskCareerIds: %@", diskCareerIds);
dispatch_async是一种非阻塞方法,因此它将立即返回。因此,当调用块外的DLog语句时,它们大部分不会被设置。因此,您看不到从内部日志语句获得的值

如果要对同一方法内的数据执行操作,则必须发送一个无意义的阻塞调度同步,或者可以调用块内的方法

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    ....

    [self doStuffWithTheArrays];
});
执行块后,对象将可用,前提是它们是实例变量,否则将丢失引用。

dispatch\u async是一种非块方法,因此它将立即返回。因此,当调用块外的DLog语句时,它们大部分不会被设置。因此,您看不到从内部日志语句获得的值

如果要对同一方法内的数据执行操作,则必须发送一个无意义的阻塞调度同步,或者可以调用块内的方法

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    ....

    [self doStuffWithTheArrays];
});

一旦执行块,对象将可用,前提是它们是实例变量,否则您将丢失引用。

异步调度的思想是,您给它一块代码以异步执行,因此放弃对代码何时执行的任何控制。对dispatch_async的调用在块进入队列后返回,而不是在块完成异步执行后返回。因此,传递给dispatch_async的块内的日志语句几乎总是在调用dispatch_async下面的日志语句之后执行。

dispatch_async的思想是,您给它一块代码以异步执行,因此放弃了对该代码何时执行的任何控制。对dispatch_async的调用在块进入队列后返回,而不是在块完成异步执行后返回。因此,要传递给dispatch\u async的块中的日志语句几乎总是在调用dispatch\u async下面的日志语句之后执行。

谢谢!您知道当我访问同一类中的方法时,为什么需要在接口文件中声明-dostuffWithArray方法吗?块看不到自己定义的方法?谢谢!您知道当我访问同一类中的方法时,为什么需要在接口文件中声明-dostuffWithArray方法吗?块不能看到自己定义的方法吗?