
30
|
第
1
章
讨论
在编写需要长时间运行的任务时,我们经常需要使用这种以闭包作为参数的方法定
义。有时候,我们想在某个任务结束时执行某些代码,同时还想让这些代码在调用
时临时指定,那么也经常采用这种方式。
闭包是
Swift
语言新加入的特性。在此之前,我们通常需要写两个方法来实现同样
的目的:一个方法用于执行需要长时间运行的耗时任务;另一个方法用于在第一个
方法完成时回调。这种方式将代码完全分割成了两个独立的部分,减少了代码的可
读性。而且,在两个方法间,变量的传递变得复杂(因为这需要使用到临时变量,
先将值保存到这些临时变量中,然后又从这些临时变量中取出值,而使用闭包则根
本不用管这些)。
如果调用方法时,传递给该方法的最后一个参数是一个闭包,则我们可以将
闭包放在方法调用的圆括号之外(这是使用了尾末闭包的写法。当闭包是方
法参数中最后一个参数时,这个参数可以移到方法调用之外,即的右圆括号
之后)。这是出于增加可读性的目的。
1.13
使用
Operation Queues
问题
我们可以将一些工作放入队列,以便操作系统在
CPU
有空时执行这些任务。
解决方案
OperationQueue
用于调度闭包,将之放到后台执行,而不会阻塞如渲染图形或接
受用户输入等实时任务的执行:
//
创建一个任务队列,用于调度多个任务
let concurrentQueue = OperationQueue()
//
设置该队列可同时执行的任务数为
10
concurrentQueue.maxConcurrentOperationCount = ...