我已经设置了一个操作队列:
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")
运行时,它会调用
Warning: A long-running operation is being executed on the main thread.
是否应该在单独的线程上运行操作?所以pinWithName
,无论其同步还是异步,都应该在一个单独的线程上运行?
请帮忙!为什么是这样?
答案 0 :(得分:1)
您的操作将在后台线程上运行,但它所做的只是启动另一个异步进程(PFCloud.callFunctionInBackground
),它将启动另一个线程。当其他进程完成时,它会在主线程上调用完成块。
所以,在这种情况下,你的操作和队列基本上什么也没做,而且你应该把调用的结果带到PFCloud.callFunctionInBackground
(即objects
)并在后台线程处理它它可能很耗时。