NSThread
一个执行的线程
概述
当你想让一个OC方法在它自己的执行线程中运行的时候,可以用这个类。当你想执行一个冗长任务,但不希望阻塞程序其余部分的执行的时候,线程显得特别有用。特别是你可以用线程来避免阻塞主线程(处理用户界面和事件相关动作)。线程还可以用来将一个大的工作划分为几个较小的工作,这将导致多核计算机的性能增加。
NSThread 类支持和NSOperation类似的用来监控一个线程运行时条件的语义。你可以用这些语义来取消一个线程的执行或者决定线程是否继续执行还是完成当前任务。取消一个线程需要你的线程代码支持。详情见cancel方法的描述。
子类化的注意点
你可以子类化NSThread并重载
main
方法来实现你的线程的主要入口点。如果你重载main
方法,就不需要调用super
来调用继承而来的行为。
话题
初始化一个NSThread对象
- init
返回一个初始化的 NSThread 对象
- initWithTarget:selector:object:
返回一个用给定参数初始化的 NSThread 对象
启动一个线程
+ detachNewThreadSelector:toTarget:withObject:
派发一个新线程并使用给定的selector作为线程的入口点
- start
开启接收方(线程对象)
- main
线程的主要入口点
#停止一个线程
+ sleepUntilDate:
阻塞当前线程知道指定的时间到了
+ sleepForTimeInterval:
使线程在给定的时间内睡眠
+ exit
终止当前线程
- cancel
更改接收者(线程)的取消状态,以指示它应该退出(exit)
确定线程的执行状态
executing
一个布尔值,指示接受者(线程)是否正在执行
finished
一个布尔值,指示接受者(线程)是否已完成执行
cancelled
一个布尔值,指示接受者(线程)是否已被取消
与主线程工作
isMainThread
一个布尔值,指示是否当前线程是主线程
mainThread
返回代表主线程的 NSThread 对象
查询当前线程环境
+ isMultiThreaded
返回是否程序是多线程的
currentThread
返回代表当前执行线程的 NSThread 对象
callStackReturnAddresses
返回包含调用堆栈返回地址的数组
callStackSymbols
返回包含调用堆栈符号的数组
与线程属性工作
threadDictionary
线程对象的字典
-
NSAssertionHandlerKey
-
name
接受者(线程)的名字
stackSize
接受者(线程)的堆栈大小,以字节为单位
线程工作的优先级
-
qualityOfService
-
NSQualityOfService
用于指示系统工作的性质和重要性。在资源争用的情况下,高质量的服务类的工作比低质量的服务类工作接受的资源要多。
+ threadPriority
返回当前线程的优先级
threadPriority
接受者(线程)的优先级
+ setThreadPriority:
设置当前线程的优先级
通知
NSDidBecomeSingleThreadedNotification
已变成单线程?
NSThreadWillExitNotification
当线程接收到exit消息,并在线程退出之前,NSThread对象会发出这个通知。在线程退出之前,被调用以接受这个消息的观察者方法会在将要退出的线程中执行。
NSWillBecomeMultiThreadedNotification
当有第一个线程从当前线程中分离的时候抛出这个通知。NSThread类最多会发出一次这个通知,也就是在一个线程第一次使用detachNewThreadSelector:toTarget:withObject:
方法或者start
方法被分离的时候。而随后这些方法的调用就不会发出这个通知了。这个通知的观察者在主线程中调用他们的线程处理方法, 而非在新线程中。观察者的通知处理方法总是会在新线程开始执行前执行。
初始化器
- initWithBlock:
类型方法
+ detachNewThreadWithBlock: