NSOperation基本知识
来源:互联网 发布:薛之谦淘宝店铺关门了 编辑:程序博客网 时间:2024/06/18 15:07
NSOperation和NSOperationQueue配合使用实现多线程编程。默认就是并发的。
具体实现步骤:
1、将任务封装到NSOperation对象中
2、将NSOperation对象添加到NSOperationQueue中
3、系统自动从NSOperationQueue中取出NSOperationNSOperation对象
4、将取出的任务放到一条新线程中执行
NSOperation是抽象类,不具有封装操作的能力,必须使用子类
有3种子类:
NSInvocationOperation
NSBlockOperation
自定义子类继承NSOperation,实现内部相应方法
NSInvocationOperation范例:
-(void)opDemo{ //创建操作 NSOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage:) object:@"Invocation"]; //如果使用了start方法就会直接在当前线程执行任务 //[op start]; //创建队列 NSOperationQueue *q =[[NSOperationQueue alloc] init]; //把操作加入队列,自动异步执行调度方法 [q addOperation:op];}
NSBlockOperation范例(多个任务):
-(void)opDemo{ NSOperationQueue *q =[[NSOperationQueue alloc] init]; for(int i = 0; i < 10; i++){ NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"任务"); //[q addOperationWithBlock:^{}]方法可以更快捷地使用 } [q addOperation:op]; }}
//如果要做线程通信,可以用下面的方法拿到主队列,往其中加[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@”更新UI”);
}]
//最大并发数:并不是线程的最大数量,而是同时执行的操作的数量。
self.opQueue.maxConcurrentOperationCount =2;
//队列里的暂停继续(挂起):
self.opQueue.suspended =!self.opQueue.suspended;
//取消队列里的操作:
[self.opQueue cancelAllOperations];
//如果不做下面的操作,取消队列任务时并不会影响队列的挂起状态,可能会对后续的操作产生影响
self.opQueue.suspended = NO;
0 0
- NSOperation基本知识
- NSOperation
- NsOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- bzoj2095 [Poi2010]Bridges
- Unity uGui RawImage 渲染小地图
- leetcode---Longest Palindromic Substring
- 在安卓中添加百度地图
- spring集成httpclient配置
- NSOperation基本知识
- Activity的生命周期和启动模式
- ffmpeg结构体,函数分析
- Google深度学习笔记 逻辑回归 实践篇
- 微信 错误码:40018,错误提示:invalid button name size
- Java语言的优点
- [LeetCode] Palindrome Pairs
- 关路灯——power 解题报告
- UITextField 的Placeholder的字体的颜色大小