iOS 多线程技术之NSThread

来源:互联网 发布:300533 冰川网络 编辑:程序博客网 时间:2024/06/06 14:07

在项目中,我们难免会用到多线程,使用多线程可以起到提高性能等的问题,今天我参考了网上的一些资料和自己查苹果文档,来说说这个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:(nullableid)argumentNS_AVAILABLE(10_5,2_0);


+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullableid)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:(nullableid)arg waitUntilDone:(BOOL)waitNS_AVAILABLE(10_5,2_0);


Hope To Help You !



0 0
原创粉丝点击