402's Dojo

iOS 异步机制

iOS

  1. 及时响应用户
  2. 实现多核调度

NSOperation

  1. 封装了大部分异步相关的逻辑,基础类,使用的时候要继承它创建我们自己的子类;
  2. 系统实现的具体的类:NSInvocationOperation,NSBlockOperation;
  3. Dependency,Completion block,KVO,Priority,Cancel
  4. non-concurrent
  • 重写main()
  • autoreleasepool
  • 不需要自己维护状态
  1. concurrent
  • 实现start()
  • 实现异步操作
  • 自己维护isFinished,isExcuting,isCancelled(manual KVO)
  1. 判断是否cancel
  • main/start
  • 循环开始处
  • 逻辑区分点

dispatch queue

  1. 将业务逻辑写在block里
  • 定义:
    ^return type(params){expression}
    typedef return type(^name)(params)
  • 声明:
    self.block = ^(params){expression};
  • 方法中定义的block在stack上,当调用copy时,会copy到heap上
  1. finalizer
  2. Serial(private dispatch queue)
  • block间顺序执行
  • dispatch_queue_create()
  • 需要自己维护reference count:
    dispatch_release()
  1. Concurrent(global dispatch queue)
  • block间并发执行
  • dispatch_get_global_queue()
  • normal, low, high
  • 系统维护reference count
  1. main dispatch queue
  • 在主线程run loop执行
  • 更新UI/主线程作为同步
  1. dispatch queue维护自己的autoreleasepool

评论