NSThread
2016-03-19 17:15
169 查看
NSThread
iOS多线程编程技术有四种NSThread,GCD,NSOperation。抽象层次从低到高,抽象层次越高,使用越简单。注:NSThread和pthread(POSIX thread)是一一对应的。
POSIX thread提供一个基于c的接口来创建线程。如果你不写在Cocoa中写应用程序,这是创建线程最好的选择。POSIX接口是相对简单的使用和配置线程提供了充足的灵活性。
NSThread 创建的几种方式
1)-alloc init 方式:- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable id)argument NS_AVAILABLE(10_5, 2_0); //这种方式创建线程需要手动开启,在开启之前可以进行一些设置,比如优先级,线程名称, [thread start];
2)detachNewThread 方式
//创建线程,并立即运行 + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable id)argument;
3)方式三
- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg NS_AVAILABLE(10_5, 2_0);
4)在指定线程中执行方法
//在主线程中执行 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array; //在指定线程中执行 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array NS_AVAILABLE(10_5, 2_0);
NSThread 属性
// @property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0); //只读 获取线程是否为主线程 @property (readonly) BOOL isMainThread NS_AVAILABLE(10_5, 2_0); //只读 获取线程是否为执行状态 @property (readonly, getter=isExecuting) BOOL executing NS_AVAILABLE(10_5, 2_0); //只读 获取线程是否为完成状态 @property (readonly, getter=isFinished) BOOL finished NS_AVAILABLE(10_5, 2_0); //只读 获取线程是否为取消状态 @property (readonly, getter=isCancelled) BOOL cancelled NS_AVAILABLE(10_5, 2_0);
相关方法解析
1)+ (BOOL)isMultiThreaded;
2) 阻塞主线程
//阻塞主线程几秒 [NSThread sleepForTimeInterval:2.0]; [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];
3)退出线程
//#warning 不能在主线程中执行/造成程序Crash //该方法调用之前,需要清理该thread占用的资源,该方法,在需要关闭的线程内部执行 + (void)exit; - (void)cancel NS_AVAILABLE(10_5, 2_0);//该方法只是标记线程canceled,线程并没有死掉(线程废弃?可以唤醒?)
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- C#实现多线程的同步方法实例分析
- C#线程间不能调用剪切板的解决方法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- 解析C#多线程编程中异步多线程的实现及线程池的使用
- C#子线程更新UI控件的方法实例总结
- C#多线程学习之(六)互斥对象用法实例
- C#线程队列用法实例分析
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 分享我在工作中遇到的多线程下导致RCW无法释放的问题
- C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法