zoukankan      html  css  js  c++  java
  • iOS多线程常用类说明

    iOS的多线程,涉及到如下一些类,这里集中做个介绍,免得混淆。

    1、NSTimer

    很显然,这是定时器类

    2、NSTask

    iOS 不支持 NSTask

    在很多并发操作的时候,多线程太耗资源,也太危险,这时候多进程出来了,通过 NSTask 可调用外部可执行程序

    3、NSThread

    iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法。

    下面根据抽象层次从低到高依次列出 iOS 所支持的多线程编程范式:

    1. Thread;

    2. Cocoa operations;

    3. Grand Central Dispatch (GCD) (iOS4 才开始支持)

    下面简要说明这三种不同范式:

    Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理 thread 的生命周期,线程之间的同步。

    线程共享同一应用程序的部分内存空间,它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。

    在 iOS 中我们可以 使用多种形式的 thread: Cocoa threads: 使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程。

    如果你选择 thread 来实现多线程,那么 NSThread 就是官方推荐优先选用的方式。

    POSIX threads: 基于 C 语言的一个多线程库,Cocoa operations 是基于 Obective-C 实现的,NSOperation 以面向对象的方式封装了用户需要执行的类操作,我们只要聚焦于我们需要做的事情,而不必太操心线程的管理,同步等事情,因为 NSOperation 已经为我们封装了这些事情。

    NSOperation 是一个抽象基类,我们必须使用它的子类。iOS 提供了两种默认实现:NSInvocationOperation 和 NSBlockOperation。

    Grand Central Dispatch (GCD): iOS4 才开始支持,它提供了一些新的特性,以及运行库来支持多核并行编程,它的关注点更高:如何在多个 cpu 上提升效率。

    有了上面的总体框架,我们就能清楚地知道不同方式所处的层次以及可能的效率,便利性差异。

    4、NSRunloop

    NSRunLoop 本质是一个消息机制的处理模式

    所有的“消息”都被添加到了NSRunLoop中去,而在这里这些消息并分为“input source”和“Timer source”

    并在循环中检查是不是有事件需要发生,如果需要那么就调用相应的函数处理。

    5、NSOperation

    一个漂亮的抽象的任务,用来自定义子类operation object。继承NSOperation可以完全控制operation object的实现,包括修改操作执行和状态报告的方式。

    6、NSOperationQueue

    提交到Operation Queues的任务必须是 NSOperation 对象,operation object封装了你要执行的工作,以及所需的所有数据。

    由于 NSOperation 是一个抽象基类,通常你需要定义自定义子类来执行任务。不过Foundation framework自带了一些具体子类,你可以创建并执行相关的任务。

    一个NSOperationQueue 操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等。

    7、NSInvocationOperation

    可以直接使用的类,基于应用的一个对象和selector来创建operation object。如果你已经有现有的方法来执行需要的任务,就可以使用这个类。

    8、NSBlockOperation

    可以直接使用的类,用来并发地执行一个或多个block对象。operation object使用“组”的语义来执行多个block对象,所有相关的block都执行完成之后,operation object 才算完成。

  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/isItOk/p/4875894.html
Copyright © 2011-2022 走看看