前两篇文章已经将了现在主流的GCD和NSOperationQueue,现在我们在聊一下NSThread。
创建NSThread
方法一 类方法
方法二 实例方法
这两者的区别是 类方法是创建新的线程并且立即启动,而第二个方法是创建线程,但是没有启动,启动需要[thread start]
。
获取线程的状态
|
|
更改线程状态
|
|
在子线程中想要更新UI怎么办,这里官方直接提供了在子线程执行方法的函数,很实用的。
代码
|
|
从输出结果看出来[self performSelectorInBackground:@selector(print) withObject:nil];
又自动生成了子线程并且在子线程执行print
函数。
把test6函数改成下面的情况
输出:
[self performSelectorOnMainThread:@selector(print)
withObject:nil
waitUntilDone:NO];
waitUntilDone为YES的时候是同步执行代码,为NO的时候异步执行代码。[self performSelectorInBackground:@selector(print) withObject:nil];
开启子线程执行print函数。
cancel thread
|
|
输出:
其实thread取消也是在执行中的线程是没办法直接取消的,[thread cancel]
紧紧是改了状态,却没有终止线程。和[NSOperation cancel]
类似,当你cancel之后,如果线程在执行,那么他会执行完毕,如果线程还没执行,那么他会终止执行。
关于thread的通知
线程的讨论暂时就这么多,有问题我们一起讨论,欢迎留言。。