gpt4 book ai didi

ios - iOS-Grand Central Dispatch从dispatch_async中的 block 获取值(value)

转载 作者:行者123 更新时间:2023-12-01 17:45:45 25 4
gpt4 key购买 nike

我正在使用下面的代码从网上下载一些数据。我需要像以前一样保留数据吗?同样,来自该块内部的NSLog语句显示该数组已被填充,但是当我在该块外部运行NSLog时,该数组显示为(null)。如何将数据保存在dispatch_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_sync或可以在块中调用这些方法。

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

[self doStuffWithTheArrays];
});

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

关于ios - iOS-Grand Central Dispatch从dispatch_async中的 block 获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com