美文网首页
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保持主线程异步操作

    上代码 第一种写法 第二种利用DispatchQueue扩展 使用 代码参考于Yep

  • iOS-14 线程基础

    参考 ios的线程和同步异步操作 - 简书线程 同步异步 Timer 等使用 本文主要从 1、 ios三种创建方式...

  • iOS 14中线程问题Thread 11: EXC_BREAKP

    在iOS 13之前的系统,似乎有做一种防止机制,如果开启了一个异步线程,在异步线程执行时,执行UI操作,会互不干扰...

  • iOS多线程操作:NSThread

    在我们开发过程中我们经常会用到多线程开发,比如在异步线程中加载资源,执行好使操作等,在iOS开发中常见的多线程操作...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • 同步与异步 & 阻塞与非阻塞

    上篇说了线程,进程,cpu,内存,硬盘之间的关系,这篇说下异步和线程 异步 因为异步操作无须额外的线程负担,并且使...

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • 事件循环 Event Loop

    JavaScript 是一门单线程语言,异步操作都是放到事件循环队列里面,等待主执行栈来执行的,并没有专门的异步执...

  • GCD

    GCD 队列与线程的关系 主队列和主线程 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主...

  • 多线程与并发(一):线程的基本概念和用法

    本篇知识点 线程创建 线程重要api 线程状态 应用方面异步调用:主线程执行期间,其他线程异步执行耗时操作提高效率...

网友评论

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

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