NSOperation

2022-09-02  本文已影响0人  飘摇的水草
  1. 配合使用NSOperation和NSOperationQueue也可以实现多线程编程。

  2. 实现多线程的步骤
    先将需要执行的操作封装到一个NSOperation对象中,然后将NSOperation对象添加到NSOperationQueue中,系统会自动将NSOperationQueue中的NSOperation取出来。将取出来的NSOperation封装的操作放到一条新线程中执行。

  3. NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类。
    使用NSOperation子类的方式有3种
    NSInvocationOperation
    NSBlockOperation
    自定义子类继承NSOperation,实现内部相应的方法。
    NSBlockOperation可以开启多个任务,使用addExecutionBlock方法。

  4. NSOperationQueue的队列类型

  1. NSOperation可以调用start方法来执行任务,但默认是同步执行的。
    也可以不创建operation对象,直接用addOperationWithBlock来直接添加任务。
    queue.maxConcurrentOperationCount表示设置最大并发操作数。用这个也可以控制创建线程的个数,如果这个数是1就变成了串行队列。大于1则为并行队列。默认是-1,即按照系统默认的线程数创建。

oqueue.suspend为yes表示暂停这个队列,queue里面的任务会被暂停,如果要恢复设置为no即可。isSuspended表示判断是否是挂起状态。
如果一个任务里有耗时的操作,即使暂停也会把这个任务执行完,然后把其他任务取消掉。

[queue cancelAllOperations] 也是这样,只是这个是取消,没办法再继续执行。

  1. 当自定义NSOperation时,如果main方法里有多个任务,最好每个任务执行前小用isCanceled判断是否已经被取消,这样做的目的是为了防止外面已经把任务取消了,但里面还在执行。

  2. NSOperation按照顺序执行,可以用 addDependency 即可。
    当NSOperation的任务执行完后会自动调用completionBlock代码块。故可以在这里监听已执行完。

  3. 线程间通信可以用 [[NSOperationQueue mainQueue]addOperationBlock] ,这样使操作放到主线程中执行。

上一篇下一篇

猜你喜欢

热点阅读