NSOperation
来源:互联网 发布:淘宝创业难吗 编辑:程序博客网 时间:2024/05/03 20:43
NSOperation
NSOperation的特点
NSOperation是基于GCD的一个封装. 但是比GCD多了一些简单实用的功能, 这就使NSOperation变的更加的面向对象.
队列里面遵循先进先出的原则, 但在这里只是他们拿出的顺序不一样, 等到他们全部拿出之后, 就会一起执行, 所以并发执行, 因此他们并没有违背先进先出的原则.
NSOperation的另一个特点就是: 他默认是在主线程中执行.只有多个任务或者放到队列中他才会开辟子线程)
- NSInvocationOperation 和 NSBlockOperation开不开线程取决于任务的个数.
- 但是他们要是放到队列中,就会自动开辟子线程.
- 开辟子线程之后, 他们会自动并发执行.
NSOperation有三种形式:
- NSInvocationOperation
- NSBlockOperation
- 自定义NSOperation
线程的设置
// 设置最大并发数, 线程并发数和线程的id没有任何关系 queue.maxConcurrentOperationCount
// 取消队列 [queue cancelAllOperations];
// 挂起队列 [queue setSuspended:YES];
// 恢复队列 [queue setSuspended:NO];
// 设置优先级 operation.queuePriority = NSOperationQueuePriorityHigh
// 设置依赖 [operation1 addDependency:operation];
NSOperation 的强大之处在于可以在不同的线程之间创建依赖, 设置监听.
NSOperation线程依赖:
NSInvocationOperation *operation = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(download)object:nil]; NSInvocationOperation *operation1 = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(download1)object:nil]; NSBlockOperation *operation2 = [NSBlockOperationblockOperationWithBlock:^{ NSLog(@"======222===, %@", [NSThreadcurrentThread]); }]; [operation2 addExecutionBlock:^{ NSLog(@"=====33333==, %@", [NSThreadcurrentThread]); }]; // 可以设置任务优先级 NSOperationQueue *queue = [[NSOperationQueuealloc]init]; // 最大并发数同一时间可以执行的线程个数 queue.maxConcurrentOperationCount =1; // 线程依赖 [operation1 addDependency:operation]; [operation2 addDependency:operation1]; // 可以在不同队列之间设置依赖 [queue addOperation:operation]; [queue addOperation:operation1]; [queue addOperation:operation2];
NSOperation任务监听:
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ for (int i=0; i<10; i++) {
// 切记, 此地是同步, 一定要注意, 如果这个地方使用了第三方的网络操作(他们默认已经异步了, 这个必须要注意):
//
例如 AFNetWorking Aliyun OSS 实际应用中这个地方要特别注意
NSLog(@"=======下载图片====%@", [NSThread currentThread]);
} }]; operation.completionBlock = ^{ NSLog(@"=======下载图片完毕====%@", [NSThread currentThread]); }; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation:operation];
自定义NSOperation
自定义NSOperation其实就是 继承NSOperation 写一些自己使用的扩展, 比如: 图片下载.
自定义非并发的NSOpetation
- 自定义的串行NSOperation,必须重写main方法, 并且在main方法中实现下载操作
- 默认情况下,你必须重写这个方法. 并且他会给你生成自动释放池
NSOperation图片下载的流程:
并发的NSOperation
如果要创建并发操作,则需要至少覆盖以下方法和属性
- start
- asynchronous
- executing
- finished
1 0
- NSOperation
- NsOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- NSOperation
- 你这一生还能陪妈妈几天?来看看
- ruby Inheritance
- 用ME_CONFIRMATION_UPDATE处理采购订单行项目确认视图
- Scramble String
- HDU-5514-Frog(容斥)
- NSOperation
- android 学习笔记(1)-Mac上安装Android studio
- MySQL 加锁处理分析
- LeetCode 93. Restore IP Addresses
- 二分图拓展及模板
- java 主函数解释
- Python实例---接入笑话API+发送邮件+云主机crontab定期执行
- C经典 结构体作为函数参数运用
- TCP/IP之一:分层