iOS开发代码段首页投稿(暂停使用,暂停投稿)iOS技术专题

NSOperation

2016-04-08  本文已影响109人  苏永茂

NSOperation (操作 /任务)

基于GCD 的面向对象的封装 。

NSOperation 本身是个抽象类 。我们定义任务的时候 ,需要使用它的子类 :

队列

NSOperatonQueue *queue = [[NSOperationQueue alloc]init]

使用最大并发数 来区分是并发 还是串行 。
queue.maxConcurrentOperationCount =

队列直接可以添加bolck任务 ,并且自动执行

[queue addOperationWithBlock:^ {

};

挂起/暂停

queue.suspended = yes 后边队列中的任务就会被暂停操作 。

queue.suspended = no 继续执行 。

这样就可以很好的控制异步操作的 暂停和开启操作 。

可以完成这样的需求 ,在互用UI交互的时候 ,把异步的操作都暂停,保证UI的流畅 ,比如滚动列表 ,然后用户交互停止以后 ,再回复异步的复杂操作 。但是要注意 ,一个任务执行了一半是不能停止的 。

使用自定义的Operation-继承自NSOperation

需要重写 -(void)main{ }
在这个函数中做异步的 自定义的操作 。要注意 ,外部调用取消操作也是进入这个方法 ,所以要自己监控 。
if (self.isCanceled) return 做了一段耗时操作以后 ,就用这个方法检测一下,用户是否取消了 。

设置依赖 。和GCD 的阻拦函数一样的意思 。控制执行顺序 。

[op1 addDependency op2] 任务1 必须在任务2完成以后才能执行 。但是不影响其他的任务的并发性 。

异步任务执行完成后的监听回调

op1.completionBlock = ^{

};

注意 :这个监听也是在子线程中 。(但是不一定是和op1同个线程 ,GCD会自动的判断需不要创建新的)

Operation 直线线程间的通信

回到主线程,其实就是在 主队列中操作 [NSOperationQueue mainQueue] addOperatinWithBlock:^{}

定义代码块的时候

<# #>这样就可以出线自定义输入的提示框 。

SDWebImage 清楚图片的内存缓存 。

[SDWebImageManger shareManger].imageCache

有各种清除方法

上一篇下一篇

猜你喜欢

热点阅读