这篇文章主要介绍“如何使用swift中的GCD”,在日常操作中,相信很多人在如何使用swift中的GCD问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用swift中的GCD”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家集网站建设,内蒙古企业网站建设,内蒙古品牌网站建设,网站定制,内蒙古网站建设报价,网络营销,网络优化,内蒙古网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
GCD是采用任务+队列的方式,有易用、效率高、性能好的特点
//concurrent 并行 let queue = DispatchQueue( label: "myQueue", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil) //sync queue.sync { sleep(1) print("in queue sync") } //async queue.async { sleep(1) print("in queue async") } //asyncAfter queue.asyncAfter(deadline: .now() + 1) { print("in queue asyncAfter") } print("after invoke queue method") /* in queue sync after invoke queue method in queue async in queue asyncAfter */
//DispatchGroup-wait let workingGroup = DispatchGroup() let workingQueue = DispatchQueue(label: "request_queue") workingGroup.enter() workingQueue.async { sleep(1) print("A done") workingGroup.leave() } workingGroup.enter() workingQueue.async { print("B done") workingGroup.leave() } print("first") //workingGroup.wait() //print("last") /* first A done B done last */
//DispatchGroup-notify workingGroup.notify(queue: workingQueue) { print("A and B done") } print("other") /* first other A done B done A and B done */
//DispatchSource-Timer var seconds = 10 let timer: DispatchSourceTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.global()) timer.schedule(deadline: .now(), repeating: 1.0) timer.setEventHandler { seconds -= 1 if seconds < 0 { timer.cancel() } else { print(seconds) } } timer.resume() /* 9 8 7 6 5 4 3 2 1 0 */
//实现一个线程安全的Array的读和写 var array = Array(0...1000) let lock = NSLock() func getLastItem() -> Int? { lock.lock() var temp: Int? = nil if array.count > 0 { temp = array[array.count - 1] } lock.unlock() return temp } func removeLastItem() { lock.lock() array.removeLast() lock.unlock() } queue.async { for _ in 0..<1000{ removeLastItem() } } queue.async { for _ in 0..<1000 { if let item = getLastItem() { print(item) } } }
到此,关于“如何使用swift中的GCD”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!