iOS线程模型
1
NSThread:objective-c线程库
2
Blocks/GCD: Blocks模式的线程池
3
NSOperationQueue: 线程池/线程队列
今天就先从NSThread学起吧!
NSThread
NSThread是轻量级的多线程开发,使用起来也并不复杂,但是使用NSThread需要自己管理线程生命周期。
1NSThread的初始化
/*
@method
@abstract 初始化方法
@discussion 创建线程之后就自动运行Selector方法
@param selector:线程执行的方法,这个selector最多只能接受一个参数
@param target:selector消息发送的对象
@param argument:传给Secletor的唯一参数,也可以为nil
@resault
*/
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable id)argument;
贴了段代码如下:
运行结果:
证明argument是传给Secletor的唯一参数。
//此方法需要创建后主动调用
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadMethod) object:nil];
[thread start];
//隐式创建线程的方法
[self performSelectorInBackground:@selector(run) withObject:nil];
2NSThread常用的操作
//获取当前线程
NSThread *current =[NSThread currentThread];
//获取主线程
NSThread *mainThread = [NSThread mainThread];
贴段代码:
打印:
PS:获取当前线程和主线程的方法,是获取执行当前方法对象的线程!
//暂停当前线程
1.[NSThread sleepForTimeInterval:10.0];
2.NSDate *date = [NSDate dateWithTimeInterval:2 sinceDate:[NSDate date]];
[NSThread sleepUntilDate:date];
PS:暂停线程的方法,是获取执行当前方法对象的线程!
//监听线程执行完成 关键字:NSThreadWillExitNotification
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(test:) name:NSThreadWillExitNotification object:nil];
贴段代码
结果:
3线程间的通信
//在指定线程上执行操作
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
//在主线程上执行操作
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
//在当前线程执行操作
- (id)performSelector:(SEL)aSelector withObject:(id)object;