iOS中的多线程 NSOperation
在ios中,使用多线程有三种方式,分别是:NSThread、NSOperation和NSOperationQueue、GCD,在本节,主要讲解一下NSOperation的使用。
NSOperation和NSOperationQueue这种方式实际上是将NSOperation的对象放到一个NSOperationQueue队列中,然后依次启动操作,类似于线程池的使用。
在使用的过程中,NSOperation的操作使用的是它的子类,分别是NSInvocationOperation和NSBlockOperation,两者没有本质的区别,只不过后者以Block的方式来实现,使用相对简单。NSOperationQueue主要负责管理和执行所有的NSOperation对象,并控制线程之间的执行顺序与依赖关系。
下面,通过NSOperation开始多线程从网络获取图片并刷新。
NSInvocationOperation
代码
// ViewController.m
// AAAAAA
//
// Created by jerei on 15-11-8.
// Copyright (c) 2015年 jerehedu. All rights reserved.
// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
} #pragma mark - 点击按钮开启线程下载图片
- (IBAction)click_InvocationOpreation_load:(UIButton *)sender { NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"]; //创建一个operation
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImageWithUrl:) object:url]; //添加到操作队列中
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
} #pragma mark - 根据url获取图片
-(void)loadImageWithUrl:(NSURL *)url{ NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data]; //回到主线程更新界面
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateImageView:) object:image]; [[NSOperationQueue mainQueue] addOperation:operation];
} #pragma mark - 更新界面
-(void)updateImageView:(UIImage *)img{
_imageView.image = img;
} @end
NSBlockOperation
代码
// ViewController.m
// AAAAAA
//
// Created by jerei on 15-11-8.
// Copyright (c) 2015年 jerehedu. All rights reserved.
// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
} #pragma mark - 点击按钮开启线程下载图片
- (IBAction)click_BlockOpreation_load:(UIButton *)sender { //创建操作队列
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
//设置最大并发线程数
operationQueue.maxConcurrentOperationCount = ; //<方法一> 创建operation
// NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
// //根据url请求数据
// NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"];
// [self loadImageWithUrl:url];
// }];
//
// //添加到队列中
// [operationQueue addOperation:operation]; //<方法二> 创建operation
[operationQueue addOperationWithBlock:^{
//根据url请求数据
NSURL *url = [NSURL URLWithString:@"http://www.jerehedu.com/images/temp/logo.gif"];
[self loadImageWithUrl:url];
}];
} #pragma mark - 根据url获取图片
-(void)loadImageWithUrl:(NSURL *)url{ NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data]; //回到主线程更新界面
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self updateImageView:image];
}];
} #pragma mark - 更新界面
-(void)updateImageView:(UIImage *)img{
_imageView.image = img;
} @end
出处:http://www.cnblogs.com/jerehedu/
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

iOS中的多线程 NSOperation的更多相关文章
- OS X 和iOS 中的多线程技术(下)
OS X 和iOS 中的多线程技术(下) 上篇文章中介绍了 pthread 和 NSThread 两种多线程的方式,本文将继续介绍 GCD 和 NSOperation 这两种方式.. 1.GCD 1. ...
- OS X 和iOS 中的多线程技术(上)
OS X 和iOS 中的多线程技术(上) 本文梳理了OS X 和iOS 系统中提供的多线程技术.并且对这些技术的使用给出了一些实用的建议. 多线程的目的:通过并发执行提高 CPU 的使用效率,进而提供 ...
- IOS中的多线程和NSRunLoop概述(转载)
线程概述 有些程序是一条直线,从起点到终点,如Hello World,运行打印完,它的生命周期便结束了:有些程序是一个圆,不断循环,直到将它切断,如操作系统,一直运行直到你关机. 一个运行着的程序就 ...
- iOS中实现多线程的技术方案
pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { ...
- iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue
iOS多线程有四套多线程方案: Pthreads NSThread GCD NSOperation & NSOperationQueue 接下来我来一个一个介绍他们 Pthreads 在类Un ...
- iOS中的多线程及GCD
多线程中的一些概念 //任务:代码段 方法 线程就是执行这些任务 //NSThread类 创建线程 执行线程 [NSThread isMainThread]//判断是否是主线程 #import & ...
- iOS中的多线程基础
NSThread NSThread是一个苹果封装过的,面向对象的线程对象.但是它的生命周期需要我们自己来手动管理,所以使用不是很常见,比如[NSThread currentThread],它可以获取当 ...
- IOS编程之多线程
IOS编程之多线程 目录 概述——对多线程的理解 IOS中实现多线程的三种方式 NSThread 线程创建 线程的同步与锁 线程间的交互 线程的操作方法 NSOperation and NSOpera ...
- iOS中 图文混排/自定义图文混排 作者:韩俊强
指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, ...
随机推荐
- 得到某个android应用 的POST和GET请求的 网址和参数
两种思路: 1.用笔记本建个wifi热点,然后抓包. 2. 把APK装到模拟器上 会在任务管理中有个exe进程,用一个软件可以抓取这个进程的所有请求 .
- Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge
Git出现error: Your local changes to the following files would be overwritten by merge: ... Please, com ...
- java自动给版本升级,遇9变0且前面一个版本加1
/** * 自动升级版本号,版本号+1 * @param version * @return */ private String autoUpgradeVersion(String version){ ...
- 【Hadoop】HDFS - 创建文件流程详解
1.本文目的 通过解析客户端创建文件流程,认知hadoop的HDFS系统的一些功能和概念. 2.主要概念 2.1 NameNode(NN): HDFS系统核心组件,负责分布式文件系统的名字空间管理.I ...
- (67)Wangdao.com第十一天_JavaScript 数组的遍历
for 普通方式遍历 var arr = [0,1,2,3,4,5,6]; for(i=0; i<arr.length; i++){ document.write("["+i ...
- [原创]App性能测试指标篇
[原创]App性能测试指标篇 目前由于苹果,三星等大厂对智能手机的研发及投入,使的智能手机发展非常迅速,每个人手中都有一些离不开生活的App,如:微信,微博,百度或是各游戏App等,但是到底App性能 ...
- 【汇总】PHP-FPM 配置优化(转)
-----------------------开启php-fpm慢脚本日志 request_slowlog_timeout = 30sslowlog = /usr/local/php/var/log/ ...
- 《Go语言实战》摘录:7.2 并发模式 - pool
7.2 并发模式 - pool
- Android 应用程序之间内容分享详解(一)
一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...
- HTTP协议GET和POST的区别
from http://blog.csdn.net/whuslei/article/details/6667095 权威点的说明请参考:http://www.cs.tut.fi/~jkorpela/f ...