您的位置:首页 > 移动开发 > IOS开发

iOS 理解使用多线程技术之NSThread

2016-01-06 12:58 302 查看
在项目中,我们难免会用到多线程,使用多线程可以起到提高性能等的问题,今天我参考了网上的一些资料和自己查苹果文档,来说说这个NSThread的使用

一:多线程一共有三种方法,NSThread,NSOperation和GCD

今天着重讨论NSThread,后续再讨论NSOperation和GCD

这三种方法从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple推荐使用的

NSThread:

优点:NSThread比其他两个更轻量级。

缺点:需要程序员来管理线程的生命周期,线程同步等。线程同步对数据的加锁会有一定的系统开销。

Cocoa operation:

优点:不需要关系线程管理,数据同步的事情,程序员自己可以专心来做自己需要执行的操作上。Cocoa operation 相关的类是NSOperation ,NSOperationQueue.NSOperation是一个抽象类,使用它必须用的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation和NSBlockOperation.创建NSOperation子类的对象,把对象添加到NSOperationQueue中执行。

GCD:

GCD是一个替代诸如NSThread,NSOperationQueue,NSInvocationOperation等技术的很高效和强大的技术。

二:NSThread的使用

1.NSThread有两种直接创建方式:实例方法和类方法,如下:

- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(nullable
id)argument NS_AVAILABLE(10_5,
2_0);

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullable
id)argument;

对上边参数的解释:

selector:线程执行的方法

target:selector消息发送的对象

argument:传输给target 的唯一参数,可以是nil.

第一种方法是先创建对象,然后再运行线程操作,在运行线程操作前可以设置线程的优先级等线程信息。这个其实就是程序猿开启线程,然后来做一些耗时操作,然后把更新UI这种操作再调用下边的方法让主线程来做,

[self performSelectorOnMainThread:<#(nonnull SEL)#> withObject:<#(nullable id)#> waitUntilDone:<#(BOOL)#>]

当然了,除了可以更新主线程的数据外,还可以来更新其它的线程,比如:

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable
id)arg waitUntilDone:(BOOL)wait
NS_AVAILABLE(10_5,
2_0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: