美文网首页
iOS保持主线程异步操作

iOS保持主线程异步操作

作者: JustLee__ | 来源:发表于2017-02-04 17:00 被阅读195次

    上代码

    第一种写法

     final public class SafeDispatch {
    
        private let mainQeuueKey = DispatchSpecificKey<Int>()
        private let mainQueueValue = Int(1)
    
        private static let sharedSafeDispatch = SafeDispatch()
        
        private init() {
            DispatchQueue.main.setSpecific(key: mainQeuueKey, value: mainQueueValue)
        }
        
        public class func async(onQueue queue: DispatchQueue = DispatchQueue.main, forWork block: @escaping () -> Void){
            
            if queue == DispatchQueue.main {
                if DispatchQueue.getSpecific(key: sharedSafeDispatch.mainQeuueKey) == sharedSafeDispatch.mainQueueValue {
                    block()
                } else {
                    DispatchQueue.main.async {
                        block()
                    }
                }
            }else {
                    queue.async {
                        block()
                }
            }
        }
    }
    

    第二种利用DispatchQueue扩展

    extension DispatchQueue {
        func safeAsync(_ block: @escaping ()->()) {
            if self === DispatchQueue.main && Thread.isMainThread {
                block()
            } else {
                async { block() }
            }
        }
    }
    

    使用

    SafeDispatch.async {
        print("iOS begin")
      }
    DispatchQueue.main.safeAsync {
                print(Thread.current)
      }
    

    代码参考于Yep

    相关文章

      网友评论

          本文标题:iOS保持主线程异步操作

          本文链接:https://www.haomeiwen.com/subject/qgxsittx.html