gpt4 book ai didi

objective-c - 使用 Grand Central Dispatch 设置变量不可检索

转载 作者:行者123 更新时间:2023-11-28 18:13:25 26 4
gpt4 key购买 nike

我正在尝试使用 grand central dispatch 设置一个 NSURL,但是在您尝试在 grand central dispatch block 之外访问它之前,该变量似乎已设置并可访问。

-(void)viewDidLoad {

[super viewDidLoad];

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue,^{

self.ubiquitousURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

NSLog(@"ubiq inside: %@", self.ubiquitousURL);

if (self.ubiquitousURL) {

self.iCloudDocURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@Documents", self.ubiquitousURL]];
self.iCloudDocString = [self.iCloudDocURL absoluteString];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadFiles) name: UIApplicationDidBecomeActiveNotification object:nil];

} else {

/* change to the main queue if you want to do something with the UI. For example: */
dispatch_async(dispatch_get_main_queue(),^{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Please enable iCloud" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[alert show];

});

}

});


NSLog(@"ubiq outside: %@", self.ubiquitousURL);

}

第一个以 ubiq inside 开头的 NSLog 返回正确的 URL,而 ubiq outside 返回 NULL。我正在使用 ARC,所以无需提及内存或类似的东西......这是一个 GCD 问题。

你知道为什么 self.ubiquitousURL 在 GCD block 之外无法访问吗?谢谢。

最佳答案

您正在进行异步调用。所以这一行 NSLog(@"ubiq outside: %@", self.ubiquitousURL); 将被执行,无论你在 backgroundQueue 中的代码是否完成。

您会先看到外部日志,然后看到内部日志。

关于objective-c - 使用 Grand Central Dispatch 设置变量不可检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379726/

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