gpt4 book ai didi

ios - 从后台线程访问 [UIApplication sharedApplication] 可以吗?

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

在处理 Objective-C 时, 我需要得到 protectedDataAvailable状态可能在一些后台线程中。

- (BOOL) isProtected {
BOOL protectedDataAvailable = [[UIApplication sharedApplication] isProtectedDataAvailable];
return protectedDataAvailable;
}

当我访问 [UIApplication sharedApplication] ,我怀疑代码块应该在主队列中运行。 我该怎么做?

我想改变它就像,
- (BOOL) isProtected {

BOOL protectedDataAvailable = NO;

dispatch_sync(dispatch_get_main_queue(), ^{
protectedDataAvailable = [[UIApplication sharedApplication] isProtectedDataAvailable];
});

return protectedDataAvailable;
}

问题一:代码是否应该在主队列/UI 线程中运行?

问题二:如果是,我更改的代码会解决问题吗?还是有更好的方法?

我问这个问题的原因是,即使我访问 UIApplication主队列同步 , 当从 main thread 调用 block 时它会崩溃。我该如何处理这个问题?

最佳答案

Question 1: Should the code be run inside main queue/ UI Thread?



肯定是的,因为如果您在 Xcode 上使用主线程检查器运行您的应用程序,将突出显示调用 UIApplication sharedApplication从后台线程访问时作为问题

Question 2: If yes, will my changed code resolve the problem?



除非您调用 isProtected从主线程是的。

or is there any better approach?



我会坚持这样的事情:
- (BOOL)isProtected
{
__block BOOL protectedDataAvailable = NO;

if ([NSThread isMainThread])
{
protectedDataAvailable = [[UIApplication sharedApplication] isProtectedDataAvailable];
}
else
{
dispatch_sync(dispatch_get_main_queue(), ^{

protectedDataAvailable = [[UIApplication sharedApplication] isProtectedDataAvailable];
});
}

return protectedDataAvailable;
}

正如 Alejandro Ivan 在评论中指出的那样,您可以使用简单的 dispatch_sync 而不是使用信号量。

关于ios - 从后台线程访问 [UIApplication sharedApplication] 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60163972/

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