iOS多线程通信:
gcd 相关
// async
DispatchQueue.global().async {
// dosomething
DispatchQueue.main.async {
}
}
// DispatchSemaphore
// 并发数
let sema = DispatchSemaphore.init(value: 2)
DispatchQueue.global().async {
// dosomething
_ = sema.wait(timeout: DispatchTime.distantFuture)
print(1)
sema.signal()
}
DispatchQueue.global().async {
// dosomething
_ = sema.wait(timeout: DispatchTime.distantFuture)
print(2)
sema.signal()
}
// done
DispatchQueue.global().async {
print("done")
}
直接 使用performSelector 动态方法调用
DispatchQueue.global().async(execute: { [unowned self] in
sleep(3)
self.perform(#selector(self.doItem1), with: params, afterDelay: 1)
RunLoop.current.run()
})
通过MachPort端口通信
// ...
port = NSMachPort()
port?.setDelegate(self)
RunLoop.current.add(port ?? NSMachPort(), forMode: RunLoop.Mode.default)
// dosomething
DispatchQueue.global().async {
self.port?.send(before: Date(), components: nil, from: nil, reserved: 0)
}
//
extension SelfClass:NSMachPortDelegate {
func handleMachMessage(_ msg: UnsafeMutableRawPointer) {
// doSomething
print("msg")
}
}