iOS多线程

  • 多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。 在系统级别内,程序并排执行,系统分配到每个程序的执行时间是由该程序的所需时间和其他程序的所需时间来决定的。然而在每个应用程序内部,存在一个或多个执行线程,它同时或者在一个几乎同时发生的方式里执行不同的任务。系统本身管理这些执行的线程,调度他们在可用的内核上运行,并在需要让其他线程执行的时候抢先打断它们。
    多线程的优势:
    1、多个线程可以提高应用程序的感知响应。
    2、多个线程可以提高应用程序在多核系统上得实时性能。

  • iOS中的多线程主要有三种实现方法:NSThread 、 NSOperation 和GCD
    三者各有优缺点,但在实际开发中,iOS也极力推崇使用GCD多线程方式。

1、NSOperation** 和 **NSOperationQueue
使用**NSOperation**的最简单的方法就是将其放入**NSOperationQueue**中。只要一个操作被加入到队列中,该队列就会启动并开始处理它。一旦操作完成,队列就会释放它。
因为**NSOperation**本身是一个抽象类,不能直接使用类的方法构建对象,需要通过其之类的方法来实现 
可以使用**NSInvokeOperation**通过指定的selector和target来实现操作
可以使用**NSBlockedOperation**通过Block来实现操作。
2、NSThread

相对于另外两种多线程技术,NSThread的优点是轻量级,缺点是需要自己管理线程的生命周期和线程同步。而且线程同步对数据的加锁会有一定的系统开销。
NSThread创建与启动主要由两种方式:

    //直接初始化
    NSThread *thread = [[NSThread alloc] init];
    //利用行为初始化
    NSThread *thread = [NSThread alloc] initWithTarget:(id) selector:(SEL) object:(id)argument;

要进行启动线程
-(void)start;

第二种利用行为初始化参数的具体说明:
selector :线程执行的方法,这个selector只能有一个参数,而且不能有返回值
target:selector消息发送对象
argument:传输给target的唯一参数,也可以是nil

3、最后说说GCD

GCD(Grand Central Dispatch)是一个大的主题,可以提高代码的执行效率与多核的利用率。包含了语言特性、runtime libraries 以及提供系统级及综合提高的系统增强功能。
GCD就是系统帮用户管理线程,而不需要在编写线程代码。程序员只需要专心编写执行某项功能的代码,添加到block或方法函数中。 有以下两种方法处理block或方法:
1)直接将block加入到dispatch queues (队列)中
2)讲Dispatch source 封装为一个特定类型的系统事件,的系统事件发生时提交一个特定的block对象或函数到dispatch queue ,然后,dispatch queue按先进先出的顺序,串行或并发执行任务。

这里的dispatch queue 是一个基于C的执行自定义任务机制,而 dispatch source 是基于C的系统事件异步处理机制。

你可能感兴趣的:(iOS多线程)