Objective c 在次线程中设置NetworkActivityIndicatorVisible值是否安全?

Objective c 在次线程中设置NetworkActivityIndicatorVisible值是否安全?,objective-c,ios,nsoperation,nsoperationqueue,Objective C,Ios,Nsoperation,Nsoperationqueue,我想知道AppDelegate是否是线程安全的?我当前有一个操作在次线程上运行网络任务,当任务开始时,我想将NetworkActivityIndicatorVisible设置为YES,任务完成后,将其设置为NO。我必须总是在主线程中调用它,还是可以在当前运行循环线程中调用它 谢谢一般来说,UIKit不是线程安全的。虽然您可能能够“逃脱”一些事情,但您应该始终在主线程上执行UIKit。有一些记录良好的例外情况 从后台线程执行此操作的模式很简单 dispatch_async(dispatch_get

我想知道AppDelegate是否是线程安全的?我当前有一个操作在次线程上运行网络任务,当任务开始时,我想将
NetworkActivityIndicatorVisible
设置为
YES
,任务完成后,将其设置为
NO
。我必须总是在主线程中调用它,还是可以在当前运行循环线程中调用它


谢谢一般来说,UIKit不是线程安全的。虽然您可能能够“逃脱”一些事情,但您应该始终在主线程上执行UIKit。有一些记录良好的例外情况

从后台线程执行此操作的模式很简单

dispatch_async(dispatch_get_main_queue(), ^{
    // Put any code you want to execute in the main thread here.
});

传递给dispatch_async的块中的代码将计划在主运行循环中运行。

是的,一般来说,您是对的。但我想知道,既然NetworkActivityIndicatorVisible只是一个布尔值,它应该是线程安全的。但我也认为该值控制指示器开始/停止动画。所以它必须在主线程中运行。所以我不知道它是否在主线程中被自动处理。谢谢你的回复。安全总比抱歉好-在主线程上调用它,除非UIApplication文档明确表示从其他线程调用是安全的。你怎么知道它“只是一个布尔值?”你看过UIKit源代码了吗?你能确定它不会改变吗?您正在传递UIApplication的一个实例,它是UIKit的一部分,它的文档说明除了从主线程之外的一些特别注意的事情外,不要做任何事情。因此,你不应该这样做。你能逃脱吗?可能吧,但为什么还要这样编码呢?编写故意违反API使用原则的代码有什么好处?我肯定有这样的使用案例,但这肯定不是其中之一。哦,哇,谢谢,我以前创建过主线程方法,但这要容易得多。