iOS多线程之NSOperation的使用
2016-03-02 10:52
399 查看
NSOperation对象的使用步骤
NSOperation对象描述了一个操作任务;NSOperationQueue对象描述了一个任务队列,相当于GCD的dispatch_queue_t
NSOperation及NSOperationQueue可以任务是GCD之上的面向对象封装
GCD提供了更底层的控制,NSOperationQueue在GCD之上实现了一些方便的功能,这些功能对于开发者而言通常是最好最安全的选择
基本使用步骤 :
1)定义操作队列
2)定义操作
3)将操作添加到队列
提示: 一旦将操作添加到队列,操作就会立即被调度执行
任务队列对象
NSOperationQueue描述了任务队列,使用两种队列:
1)主队列,其中的任务只在主线程中执行,和GCD的主队列一样
使用alloc+init方式创建
NSOperationQueue的其他方法:
任务对象及其子类
NSOperation描述了一个任务,是一个抽象类型,应当使用其子类
NSBlockOperation和NSInvocationOperation
1)NSBlockOperation使用block描述一个任务:
2)NSInvocationOperation使用方法一个任务:
向任务度列中添加任务
使用任务队列对象的addOperation方法:
总结:三种添加任务的方式:
1)addOperationWithBlock:
2)添加NSBlockOperation任务
3)添加NSInvocationOperation任务
异步下载图片
任务1:bo1对象,描述了一个下载任务
任务2:bo2对象,将下载后的图像对象显示
任务1添加到自定义任务队列中,在子线程执行
任务2添加到主队列中,在主线程执行
任务的依赖
通过任务的依赖可以方便地控制多个任务执行的先后顺序
使用NSOperation的addDependency:方法添加依赖
其中self.img是新添加的一个UIImage属性
NSOperation对象描述了一个操作任务;NSOperationQueue对象描述了一个任务队列,相当于GCD的dispatch_queue_t
NSOperation及NSOperationQueue可以任务是GCD之上的面向对象封装
GCD提供了更底层的控制,NSOperationQueue在GCD之上实现了一些方便的功能,这些功能对于开发者而言通常是最好最安全的选择
基本使用步骤 :
1)定义操作队列
2)定义操作
3)将操作添加到队列
提示: 一旦将操作添加到队列,操作就会立即被调度执行
任务队列对象
NSOperationQueue描述了任务队列,使用两种队列:
1)主队列,其中的任务只在主线程中执行,和GCD的主队列一样
+ (NSOperationQueue *)mainQueue2)自定义队列,其中的任务会在子线程中执行,和GCD的全局队列一样
使用alloc+init方式创建
NSOperationQueue的其他方法:
- (void)cancelAllOperations //取消所有的任务 - (void)waitUntilAllOperationsAreFinished //等待至所有任务结束 @property NSInteger maxConcurrentOperationCount //队列中任务的最大并发数 @property(assign) dispatch_queue_t underlyingQueue //GCD的底层队列
任务对象及其子类
NSOperation描述了一个任务,是一个抽象类型,应当使用其子类
NSBlockOperation和NSInvocationOperation
1)NSBlockOperation使用block描述一个任务:
+ (instancetype)blockOperationWithBlock:(void (^)(void))block还可以添加block,使其描述多个任务
- (void)addExecutionBlock:(void (^)(void))block
2)NSInvocationOperation使用方法一个任务:
- (instancetype)initWithTarget:(id)target selector:(SEL)sel object:(id)arg指定的方法可以有返回值,使用result属性获取
@property(readonly, retain) id result
向任务度列中添加任务
使用任务队列对象的addOperation方法:
- (void)addOperation:(NSOperation *)operation //不会阻塞当前线程的执行 - (void)addOperations:(NSArray<NSOperation *> *)ops waitUntilFinished:(BOOL)wait //可以阻塞当前线程还有一种直接传递block的添加任务方式:
- (void)addOperationWithBlock:(void (^)(void))block
总结:三种添加任务的方式:
1)addOperationWithBlock:
2)添加NSBlockOperation任务
3)添加NSInvocationOperation任务
异步下载图片
任务1:bo1对象,描述了一个下载任务
任务2:bo2对象,将下载后的图像对象显示
任务1添加到自定义任务队列中,在子线程执行
任务2添加到主队列中,在主线程执行
任务的依赖
通过任务的依赖可以方便地控制多个任务执行的先后顺序
使用NSOperation的addDependency:方法添加依赖
- (void)addDependency:(NSOperation *)operation如:将上面的代码修改
其中self.img是新添加的一个UIImage属性
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略