gpt4 book ai didi

ios - 为什么我的 NSOperationQueue 在主线程上运行?

转载 作者:可可西里 更新时间:2023-11-01 02:24:22 24 4
gpt4 key购买 nike

我已经设置了一个操作队列:

func initialiseOperationQueue(){
self.operationQueue = NSOperationQueue()
self.operationQueue.name = "General queue"
self.operationQueue.maxConcurrentOperationCount = 2

}

然后我在我的队列中添加了一个操作

let op = HPSyncDataOperation(type: HPSyncDataOperationType.OnlineRecord, delegate: self, date: self.latestLastUpdateAt)
self.operationQueue.addOperation(op)

它基本上是使用Parse框架来异步下载一些在线记录数据。它的实现如下所示:

PFCloud.callFunctionInBackground("recordPosts", withParameters: param, block: { (objects:AnyObject!, error:NSError!) -> Void in
if error == nil {
let dataObjects = objects as [PFObject]

//TROUBLE HERE:
for object in dataObjects {
object.pinWithName("Received Posts")
}
//abcdefg
}
})

但在执行过程中,当 object.pinWithName("Received Posts") 运行时,它会调用

警告:正在主线程上执行长时间运行的操作。

一个操作应该在单独的线程上运行吗?那么pinWithName,无论是同步还是异步,都应该在单独的线程上运行吗?

求助!为什么是这样?

最佳答案

您的操作将在后台线程上运行,但它所做的只是启动另一个异步进程 (PFCloud.callFunctionInBackground),这将启动另一个线程。当其他进程完成时,它会调用主线程上的完成 block 。

因此,在这种情况下,您的操作和队列基本上什么都不做,实际上您应该获取调用 PFCloud.callFunctionInBackground 的结果(即 objects)如果它可能很耗时,则在后台线程上处理它。

关于ios - 为什么我的 NSOperationQueue 在主线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766352/

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