iOS NSThread/(Swift Thread)讲解

本文详细介绍了苹果官方提供的线程管理类NSThread。主要内容包括线程的生命周期、如何创建和启动线程、线程的休眠与终止等。同时,还探讨了一些编程实践中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSThread 是苹果官方提供的,面向对象,简单易用。程序员需要控制线程的生命周期,对线程对象进行操作。

1.    首先说一下线程的生命周期,线程的生命周期分为 创建 - 就绪 - 运行 - 堵塞 - 死亡 这五种情况,在NSThread中, 我们最主要的就是对创建, 就绪这两步进行操作。

创建:实例化一个线程对象。

就绪:将线程对象添加到可调度线程池,等待CPU调用。

运行:CPU从可调度线程池中选中线程进行调用,当前选中的线程为运行状态,未选中的重新变为就绪状态,此步程序员无法控制,由系统来处理。

堵塞:线程休眠处理。线程sleep、加了同步锁的对象正在被其他线程操作时,线程也会进入休眠。

死亡:当线程需要执行的代码块执行完,或者线程强制退出,线程结束。


2.

上代码

新建:

    @available(iOS 2.0, *)

    public convenience init(target: Any, selector: Selector, object argument: Any?)


    @available(iOS 10.0, *)

    public convenience init(block: @escaping () -> Swift.Void)


两个便利构造函数,创建一个线程对象,可以指定执行代码block、或者指定一个执行方法,方法可以传一个参数argument(可能为nil)。 (传入参数可能为nil,相对应的方法参数声明的时候就得注意,是否有必要设置可选型)

就绪:

     @available(iOS 2.0, *)

     open func start()

start方法,将线程对象加入可调度队列。

堵塞:

    open class func sleep(until date: Date)


    open class func sleep(forTimeInterval ti: TimeInterval)

类方法,当前线程进入休眠

死亡:


    open class func exit()

类方法,强制结束当前线程,当前线程未执行代码不再执行。苹果官方不推荐使用,文档如下:

Invoking this method should be avoided as it does not give your thread a chance to clean up any resources it allocated during its execution.

所以当我们想结束线程是,应该通过canle()方法和isCancelled去判断,合理的对线程的执行死亡处理。

3.

我学习考虑的几个点说一下:

    *  为什么sleep,exit,current等为什么是类方法或属性,并且不会出现线程错乱的情况。其实这个还是对线程了解不彻底,同一时间,只会有一个线程被cpu调用进入运行状态,这些类方法都是对当前运行的线程进行的操作,所以根本不会同时两个线程都在运行,无法判断操作哪个这种情景

    * 

    @available(iOS 2.0, *)

    open func cancel()

    cancel方法不会去结束线程,实际上只是对线程进行了一个标记

    

    @available(iOS 2.0, *)

    open var isCancelled: Bool { get }

    初始为false,cancel方法调用后,设为true。 我们一些逻辑判断操作可以用到这一块。


4.

补充常用一些其他的地方:

    open class var current: Thread { get }

获取当前线程(经常用到)


    @available(iOS 10.0, *)

    open class func detachNewThread(_ block: @escaping () -> Swift.Void)


    open class func detachNewThreadSelector(_ selector: Selector, toTarget target: Any, with argument: Any?)

实例化一个线程对象,并且隐式调用start(),将线程对象加入可调度线程池,进入就绪状态。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值