有的时候一个页面要加载好几个网络请求
然后才能刷新页面,那怎么办呢?
如果请求没有依赖,可以不启用多线程
let number = 5
request1.completionCallBack{
number = number - 1
if number == 0{
reload()
}
}
如果有依赖的
let operation1 = BlockOperation.init {
let semaphore = DispatchSemaphore(value: 0)
Services.sendPostRequestcompletionCallBack: { (data) in
semaphore.signal()
}
semaphore.wait()
}
let operation2 = BlockOperation.init {
let semaphore = DispatchSemaphore(value: 0)
Services.sendPostRequestcompletionCallBack: { (data) in
semaphore.signal()
}
semaphore.wait()
}
let operation3 = BlockOperation.init {
DispatchQueue.main.async {
self.setupModel()
}
}
operation3.addDependency(operation2)
operation3.addDependency(operation1)
let queue = OperationQueue()
queue.addOperations([operation1,operation2,operation3], waitUntilFinished: false)
现在的网络框架都是异步回调主线程的,所以如果直接在主线操作 wait(包括用其他方法)会卡住线程,所以不要在主线操作请求等待
网友评论