IOS--UI--NSOperation
2015-08-13 20:33
387 查看
NSOperation 的作用
1.配合使用 NSOperation 和 nsoperationQueue 也能实现多线程编程
注: NSOperation 是一个抽象类,不具备封装操作的能力,需要使用子类
①NSInvocationOperation
②NSBlockOperation
③自定义子类继承 NSOperation 实现内部方法
2.步骤
1>需要的执行操作封装到一个NSOperation 对象中;
2> 然后将 NSOperation 对象添加到NSOperationQueue 中
3>系统会自动将 nsoperationQueue 中的 NSOperation 取出来
4>将取出的 SOperation 封装的操作放到一条新线程中执行;
①NSInvocationOperation
②NSBlockOperation
注:只有 NSBlockOperation 的封装操作>1 才会开启异步执行
注:
1.取出任务是有顺序的 但是任务是一起进行的
2.不需要加 start 方法
队伍的操作
①取消
-(void)cancelAllOperation;
②恢复和暂停队伍
BOOL setSuspended
YES 暂停 NO 恢复
③ 优先级
④操作依赖
① 同一队伍内的NSOperation 可以依靠依赖关系 来保证执行顺序
② 在不同对列之间设置依赖 但不能相互依赖
④ 监听操作
1.配合使用 NSOperation 和 nsoperationQueue 也能实现多线程编程
注: NSOperation 是一个抽象类,不具备封装操作的能力,需要使用子类
①NSInvocationOperation
②NSBlockOperation
③自定义子类继承 NSOperation 实现内部方法
2.步骤
1>需要的执行操作封装到一个NSOperation 对象中;
2> 然后将 NSOperation 对象添加到NSOperationQueue 中
3>系统会自动将 nsoperationQueue 中的 NSOperation 取出来
4>将取出的 SOperation 封装的操作放到一条新线程中执行;
①NSInvocationOperation
.m - (void)viewDidLoad { [super viewDidLoad]; //封装操作 也就是创造操作对象 封装需要操作的任务 NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download ) object:nil]; // 执行操作 start 启动上面的方法 默认主线程 [operation start]; } - (void)download { NSLog(@"123%@",[NSThread currentThread]); } //只有放在NSOperationQueue 中才会异步执行
②NSBlockOperation
-(void)blockOperation{ // 1.封装操作 NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1--%@",[NSThread currentThread]); }]; //通过-(void)addExecutionBlock:(void)(^)bloack; 添加更多操作 [operation addExecutionBlock:^{ NSLog(@"2--%@",[NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"3--%@",[NSThread currentThread]); }]; // 执行操作 [operation start]; }
注:只有 NSBlockOperation 的封装操作>1 才会开启异步执行
-(void)queue{ //并发对列 //封装操作 NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download ) object:nil]; NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector( run ) object:nil]; NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1--%@",[NSThread currentThread]); }]; [operation3 addExecutionBlock:^{ NSLog(@"2--%@",[NSThread currentThread]); }]; //创建队伍 NSOperationQueue *queue=[[NSOperationQueue alloc]init]; // 将操作加入队伍中 [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3]; }
注:
1.取出任务是有顺序的 但是任务是一起进行的
2.不需要加 start 方法
队伍的操作
①取消
-(void)cancelAllOperation;
②恢复和暂停队伍
BOOL setSuspended
YES 暂停 NO 恢复
③ 优先级
④操作依赖
① 同一队伍内的NSOperation 可以依靠依赖关系 来保证执行顺序
[operation2 addDependency:operation3]; //操作2 依赖操作1 要等1 做完之后2 才会做
② 在不同对列之间设置依赖 但不能相互依赖
//Error [operation2 addDependency:operation3]; [operation3 addDependency:operation2];
④ 监听操作
-(void)operationListen{ NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1--%@",[NSThread currentThread]); }]; operation.completionBlock = ^{ //下载完 之后想做的事情 NSLog(@"下载完毕----%@",[NSThread currentThread]); }; //创建队伍 NSOperationQueue *queue=[[NSOperationQueue alloc]init]; [queue addOperation:operation]; }
相关文章推荐
- swanzhu学ios(四)之UIScrollView与UIPageControl
- 导航控制器---UINavigationController
- ZOJ 2966 Build The Electric System【最小生成树】
- poj 1458 Common Subsequence
- LeetCode-Implement Queue using Stacks
- UIControl和它的子类
- android 事件处理机制之requestDisallowInterceptTouchEvent
- The Unique MST--hdoj
- The Unique MST--hdoj
- HDU1711-Number Sequence-KMP算法(模板)
- 代码手写UI,xib和StoryBoard间的博弈
- UITableView 的编辑
- UITextField 详解
- 配置UIAutomator中的ANT环境报不是内部命令与外部命令
- SOAPUI 循环设置
- SOAPUI 属性传递之二
- SOAPUI 数据源设置
- iOS开发UI中懒加载的使用方法
- UITableViewCell左侧会有默认15像素的空白
- SOAPUI 属性设置