gpt4 book ai didi

ios - print - 后台或主线程操作

转载 作者:行者123 更新时间:2023-11-28 20:59:56 24 4
gpt4 key购买 nike

这听起来可能非常基础和愚蠢,但它已经困扰了我一段时间。 如何根据操作对打印进行分类 - 主要还是后台?
作为一个小测试,将 print 放在后台任务中 - Web 服务调用:

Webservice().loadHeadlinesForSource(source: source) { headlines in
print("background print")
self.headlineViewModels = headlines.map(HeadlineViewModel.init)

DispatchQueue.main.async {
print("main thread print")
completion()
}
}

打印语句都被打印出来了。根据以前的经验,如果打印是一个主线程任务,Xcode 会给我一个警告,说我需要把它放在主线程中。 这是打印不是主线程操作的证据。 请注意我并不是说打印是后台任务。
但是,我有这样的理解,因为 print 在控制台上显示输出,所以它不是后台操作。事实上,所有的日志记录操作都不是。
如何证明这一分类的合理性?

最佳答案

您认为主线程操作 似乎是需要在主线程上执行的调用。从这个角度来看,您是正确的,并且已经找到了该调用不是主线程操作的证据。

但是这跟别的有什么关系吗?在内部,如果需要,此方法可能仍会在主线程或我们关心的任何其他线程上执行其实际操作。所以从这个意义上说,主线程操作是一种限制,调用需要在主线程上执行,但与其执行或多线程无关。

不调查什么print就编码而言,我们可以看到它可以跨多个“计算机”工作。你可以在你的设备 (iPhone) 上运行你的应用程序,同时插入你的计算机上的 Xcode 将打印出日志。这让人怀疑 print很像对远程服务器的调用,在这种情况下,服务器负责序列化事件,因此客户端在哪个线程上没有区别。还有其他可能性,例如将日志放入文件然后发送,这实际上没什么区别。

那么如何根据操作对打印进行分类——主要还是后台?答案可能是否定的。该调用不限于任何线程,因此它不是主要的。它可能会锁定它所在的任何线程,直到操作完成,因此它也不是后台。可以把它想象成 Data(contentsOf: <#T##URL#>)这将阻塞线程,直到从给定 URL 检索到数据(或抛出异常)。

关于ios - print - 后台或主线程操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870766/

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