IOS面试题(多线程) --- NSOperation

OC面试题目合集地址

问题1: NSOperation执行多线程优点或相比GCD优势是什么

NSOperration基于cocoa框架实现, 底层是GCD, 相当于基于GCD封装的对象。

  • GCD无法取消队列中的任务的, 而NSOperation则取消未运行任务
  • NSOperation可随意调配任务执行顺序, GCD比较繁琐
  • NSOperation任务支持KVO监听, 可方便监听任务状态(开始/执行中/结束), 而GCD不支持
  • NSOperation可设置同一队伍优先级, 也可设置并发任务执行顺序。GCD只能设置不同队列的执行优先级
  • NSOperationQueue支持设置最大并发数, 而GCD不支持
  • NSOperation支持自定义, 封装比较繁琐代码, 提高复用性


问题2: 我们可以控制NSOperation哪些状态

  • isReady: 当前任务是否处于就绪状态
  • isExecuting: 当前任务是否处在正在进行中
  • isFinished: 当前任务是否已完成
  • isCancelled: 当前任务是否已取消

同时关于状态控制

  • 如果只重写main方法, 底层控制变更任务执行完成状态以及任务退出
  • 如果重写start方法, 自行控制任务状态


问题3: 系统是怎样移除一个isFinished=YES的NSOperation的?

答案:

通过KVO

系统通过KVO方式来移除operationqueue中对应operation来达到, 正常销毁operation对象

如果追问KVO实现原理见: IOS面试题(类相关) --- KVO

你可能感兴趣的:(IOS面试题(多线程) --- NSOperation)