多线程- 1 基本用法

本文介绍了Swift中多线程的基本用法,包括DispatchQueue的应用,DispatchWorkItem的封装优势,延迟执行和once操作。通过实例展示了如何利用DispatchWorkItem提高代码组织和效率。
摘要由CSDN通过智能技术生成

基本用法

多线程的最常见的目的就是

1.把耗时的计算操作放到子线程

2.通知主线程渲染UI

区别只在于是串行队列和并行队列,比如webImage,就是并行的,来了就通知子线程去处理然后调用不同的imageView显示出来,再比如数据库操作,那就还是串行的好,至少也要上锁保证读取安全

for i in 2...6000 {
    DispatchQueue.global().async {
        print(i)
        DispatchQueue.main.async {
           print(i,"main")
        }
    }
}

上述用法就是基本用法了,先是子线程,然后再套一个主线程去渲染UI神马的

DispatchWorkItem

这个好像是Swift自带的,OC没见过这东西

DispatchWorkItem本身是一个类,初始化方法有两个

而这个block实际是个() -> Void,而Void是()的别名,所以是一个无参也没返回值的闭包,而当函数里面只有一个闭包的时候

let item = DispatchWorkItem
        {
            print("123",Thread.current)
        }

就可以用尾随闭包的方式写成上面这样

      let item = DispatchWorkItem
        {
            print("123",Thread.current)
        }
        let mainItem = DispatchWorkItem
        {
            print("main",Thread.current) //main <NSThread: 0x600001e4c580>{number = 1, name = main}

        }
        DispatchQueue.global().async(execute: item)
        DispatchQueue.main.async(execute: mainItem)

这个和普通的GCD用法没什么区别,但是在封装上面要方便,相对来说Swift更推荐这个方法

延迟执行

DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 0.5, execute: item)

比如这段代码,就是延时0.5s执行

Once

fileprivate var INITTASK:Void =
{
    let id = "123456"
    //初始化操作
}()

这个括号里面的内容只会执行一次,把函数栈打印出来

其实本质还是dispatch_once

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值