您的位置:首页 > 其它

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,线程并没有死掉(线程废弃?可以唤醒?)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 线程