美文网首页
iOS开发之_多线程

iOS开发之_多线程

作者: Icanbe | 来源:发表于2016-07-19 20:28 被阅读186次

    一 单线程概述
    每个正在运行的程序(即进程)至少包含一个线程,这个线程是主线程.
    主线程在程序启动时被创建,用于执行main函数.
    只有一个主线程的程序被称为单线程程序.主线程负责执行程序所有的代码(UI刷新,网络请求,数据加载),这些代码只能顺序执行,不能并发执行.

    二 多线程概述
    拥有多个线程的程序被称为多线程程序.
    iOS允许用户自己开辟线程,相对于主线程而言,这些线程被称为子线程.
    子线程与主线程都是独立运行的单元,相互不影响,所以可以并发执行.

    三 单线程&多线程区别
    单线程程序只有一个线程,所以代码顺序执行,容易出现代码阻塞(页面假死)等状态.
    多线程程序各个线程独立执行,能有效避免代码阻塞,并提高程序运行性能.
    注意:UI添加和刷新必须在主线程执行.

    在 iOS 中其实目前有 4 套多线程方案,他们分别是:
    <pre>

    fourmethod.png

    </pre>

    <pre>

    1. Pthread
      是这四套线程中最垃圾的一套方法,我们也可以直接忽略它,在我们开发中根本就遇不到。简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强(然并卵),当然在 iOS 中也是可以的。不过这是基于c语言的框架.

    2. NSThread
      这套方案是经过苹果封装后的,并且完全面向对象的。所以你可以直接操控线程对象,非常直观和方便。但是,它的生命周期还是需要我们手动管理,所以这套方案也是偶尔用用,比如 [NSThread currentThread],它可以获取当前线程类,你就可以知道当前线程的各种属性,用于调试十分方便。

    3. GCD
      全称是Grand Central Dispatch,实际在我们开发过程中用到多线程中用到最多的是GCD了,它是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的CPU内核(比如双核、四核),最重要的是它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),完全不需要我们管理,我们只需要告诉干什么就行。同时它使用的也是 c语言,不过由于使用了 Block(Swift里叫做闭包),使得使用起来更加方便,而且灵活。

    4. NSOperation和NSOperationQueue
      NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。操作步骤也很好理解:
      将要执行的任务封装到一个 NSOperation 对象中。
      将此任务添加到一个 NSOperationQueue 对象中。
      然后系统就会自动在执行任务。至于同步还是异步、串行还是并行请继续往下看:
      </pre>
      好处:
      1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载
      2、发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好
      缺点:
      1、大量的线程降低代码的可读性,
      2、更多的线程需要更多的内存空间
      3、当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。

    相关文章

      网友评论

          本文标题:iOS开发之_多线程

          本文链接:https://www.haomeiwen.com/subject/qwzmjttx.html