(不介绍 什么是线程、线程和进程的区别、多线程有什么用、什么是串行、什么是并行)
线程方案
- Pthreads 基于C语言的
- NSThread
- GCD
- NSOperation & NSOperationQueue
Thread
- 创建并启动
Objective-C
//创建线程 【object :线程调用方法传递的参数】
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@"Cancer"];
//开启线程
[thread start];
Swift
//创建线程 【object :线程调用方法传递的参数】
let thread = NSThread(target: self, selector: "run:", object: "Cancer")
//启动线程
thread.start()
- 创建并自动启动
Objective-C
//创建并自动启动 【detach使什么分开】
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"Cancer"];
Swift
//创建并自动启动 【detach使什么分开】
NSThread.detachNewThreadSelector("run:", toTarget: self, withObject: "Cancer")
Thread还有很多其他的方法
//取消线程
- (void)cancel;
//启动线程
- (void)start;
//判断某个线程的状态的属性
@property (readonly, getter=isExecuting) BOOL executing;
@property (readonly, getter=isFinished) BOOL finished;
@property (readonly, getter=isCancelled) BOOL cancelled;
//设置和获取线程名字
-(void)setName:(NSString *)n;
-(NSString *)name;
//获取当前线程信息
+ (NSThread *)currentThread;
//获取主线程信息
+ (NSThread *)mainThread;
//使当前线程暂停一段时间
+ (void)sleepForTimeInterval:(NSTimeInterval)time;
//暂停到某个时刻
+ (void)sleepUntilDate:(NSDate *)date;
SWIFT
Swift的方法名字和OC的方法名都一样,我就不浪费空间列举出来了。
其实,NSThread 用起来也挺简单的,因为它就那几种方法。同时,我们也只有在一些非常简单的场景才会用 NSThread, 毕竟它还不够智能,不能优雅地处理多线程中的其他高级概念。所以接下来要说的内容才是重点。