网络多线程 ---实现网络加载图片
来源:互联网 发布:航天科技 知乎 编辑:程序博客网 时间:2024/05/23 00:47
案例要求:网络加载图片,随机加载到设置好的视图上
实现的效果图如下:
具体代码如下:
//
// ViewController.m
// 0603---NSOperationQueue
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)NSMutableArray * imageArray;
@end
@implementation ViewController
#pragma mark - 懒加载
- (NSMutableArray *)imageArray
{
if (_imageArray==nil)
{
_imageArray=[NSMutableArrayarray];
}
return_imageArray;
}
#pragma mark - 入口
- (void)viewDidLoad {
[superviewDidLoad];
//加载视图
[self_loadViews];
//开启多线程加载图片
[self_loadThread];
}
- (void)_loadViews
{
for (int i=0; i<15; i++)
{
int col=i%3;
int row=i/3;
UIImageView * imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(22+col*(80+45),40+row*(100+20),90, 90)];
imageView.backgroundColor=[UIColorredColor];
[self.imageArrayaddObject:imageView];
[self.viewaddSubview:imageView];
}
}
- (void)_loadThread
{
//开启多线程
NSOperationQueue * queue=[[NSOperationQueuealloc]init];
for(int i=0;i<self.imageArray.count;i++)
{
NSBlockOperation * block=[NSBlockOperationblockOperationWithBlock:^{
//下载图片
NSString * imageSrc=@"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%d.jpg";
imageSrc=[NSStringstringWithFormat:imageSrc,i]; //拼接字符串
NSURL * URL = [NSURLURLWithString:imageSrc];
NSData * data = [NSDatadataWithContentsOfURL:URL];
UIImage * image=[UIImageimageWithData:data];
//获取主线程,刷新UI
NSOperationQueue * queue2=[NSOperationQueuemainQueue];
[queue2addOperationWithBlock:^{
//刷新图片,给imageView赋值
UIImageView * imageView=self.imageArray[i];
imageView.image=image;
}];
}];
[queueaddOperation:block];
}
}
@end
0602---小结:
多线程的三种创建方式
NSThread
1.实例方法:(调用start方法开启多线程)
[NSThread alloc]initWithTarget:nil selector:nil withObject:nil];
2.类方法
[NSThread detachNewThreadSelector:nil toTarget:nil withObject:nil];
3.刷新UI必须通过主线程
[self performSelectorOnMainThread:nil withObject:nil waitUntilDone:nil];
(*)4.隐式开启多线程
[self performSelectorInBackground:nil withObject:nil];
0603- - - -NSOperationQueue
1.有对象方法,没有类方法
创建多线程(4种方式):
// 1> 采用NSOperation的子类NSInvocationOperation来开启多线程(必须添加到队列)
NSInvocationOperation * nvo=[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(show)object:nil];
[queueaddOperation:nvo];
// 2> 采用NSBlockOperation 来开启多线程(必须添加到队列)
NSBlockOperation * block=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"我是block");
}];
[queueaddOperation:block];
// 3> 采用队列(不须重新添加到队列)
[queue addOperationWithBlock:^{
NSLog(@"我是queue创建的block");
}];
// 4>
NSBlockOperation * block=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"NSBlockOperation");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===1");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===2");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===3");
}];
[blockstart];
2.指定线程的执行顺序- - - 依赖(addDependency)
//创建block1
NSBlockOperation * block1=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"我是block1");
}];
[queue addOperation:block1]; //添加到队列
//创建block2
NSBlockOperation * block2=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"我是block2");
}];
[block2 addDependency:block1]; //依赖---先后执行顺序(block1 > block2)
[queue addOperation:block2]; //添加到队列
3.刷新UI
//开启多线程
NSOperationQueue * queue=[[NSOperationQueuealloc]init];
NSBlockOperation * block=[NSBlockOperationblockOperationWithBlock:^{
//下载图片
{
}
//获取主线程,刷新UI
NSOperationQueue * queue2=[NSOperationQueuemainQueue];
[queue2 addOperationWithBlock:^{
//刷新图片,给imageView赋值
{
}
}];
}];
[queueaddOperation:block];
- 网络多线程 ---实现网络加载图片
- 多线程加载网络图片
- 网络图片延迟加载实现
- 实现网络图片的加载
- 多线程应用(从网络加载图片)
- android异步的网络图片加载,支持多线程异步加载
- android Gallery实现异步加载网络图片
- Android实现加载网络端图片
- 从零开始实现一个网络图片加载框架
- 使用AsyncTask实现网络的图片加载
- SmartImageView重新实现网络图片的加载
- SmartImageView重新实现网络图片的加载
- 异步加载网络图片(多线程,和AsyncTask)
- iOS-UIImageView加载网络下载的图片(异步+多线程)
- Delphi加载网络图片
- android加载网络图片
- 网络加载图片
- 加载网络图片
- angular.element方法汇总(转)以及AngularJS 动态添加元素和删除元素
- 开发中常用服务集合(已完结)
- Hive 查询语法大集合
- linux图形界面介绍
- MyBatis获取插入记录的 id 自增长字段值
- 网络多线程 ---实现网络加载图片
- Find命令示例(第二部分)----15个极好的Linux find命令示例
- 1139: 出栈序列统计
- can not open jvm.cfg
- QML和C++混合编程--Qt声明式用户界面运行环境
- (PO,VO,TO,BO,DAO,POJO)概念解释
- 南京java——软件测试培训网站
- 动态改变Store的请求URL
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解