Stanford iOS10 笔记-L8 多线程和文本框

GCD

现在iOS中使用多线程编程的主要方式是使用GCD(Grand Center Dispatch)。GCD管理着一个线程池,是对线程操作的封装。你需要做的,就是挑选/生成所需要的queue,然后把需要做的事情添加进queue,并通知是sync/async即可。这样,复杂的多线程编程在iOS就被简化了。注意这里的queue不是线程,它管理着一个线程,是对线程操作的封装。 main queue:每个应用启动的时候,系统默认生成的queue,所有和UI相关的操作都(必须)在此queue运行,所以复杂的事件有可能阻塞该queue,从而影响交互; global queue:除了main queue以外其他的queue;

从执行方式看,queue分成 :

  • serial: 任务一个接一个的完成
  • concurrent: 任务可以同时进行(但实际运行时能否做到取决于当时的硬件情况和当前创建的线程数量等)

使用示例(注意内存管理):

DispatchQueue.global(qos: .userInitiated).async { [weak self] in
    //some actions
    DispatchQueue.main.async {
        //do UI update if necessary
    }       
}

在获取global queue的时候,可以设置queue的优先级。对于 iOS10.0及以后的系统,使用QoS(Quality of Service):

  • DispatchQoS.userInteractive // high priority, only do something short and quick
  • DispatchQoS.userInitiated // high priority, but might take a little bit of time
  • DispatchQoS.background // not directly initiated by user, so can run as slow as needed
  • DispatchQoS.utility // long-running background processes, low priority

对于之前的系统,使用 priority:

  • DISPATCH_QUEUE_PRIORITY_HIGH
  • DISPATCH_QUEUE_PRIORITY_DEFAULT
  • DISPATCH_QUEUE_PRIORITY_LOW
  • DISPATCH_QUEUE_PRIORITY_BACKGROUND

虽然GCD易于上手,但是也有一些不足:

  • 不能实现次线程操作的依赖:比如某个任务B需要在任务A完成后再进行
  • 不能取消进行中的任务

在GCD以前,iOS中多线程开发主要使用 NSOperation 和 NSOperationQueue,它们就能弥补上述的不足。限于篇幅,这里不展开。

UITextField

没有什么难的,主要内容即 选择键盘形式,以及监听键盘消息。

本节内容较简单,涉及到的Swift内容不多。