网络多线程 ---实现网络负载图片
2015-09-26 11:39
615 查看
案例要求:网络负载图片,随机装上树立了良好的视图
实现的效果图例如以下:
详细代码例如以下:
//
// 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=[NSMutableArray
array];
}
return
_imageArray;
}
#pragma mark - 入口
- (void)viewDidLoad {
[super
viewDidLoad];
//载入视图
[self
_loadViews];
//开启多线程载入图片
[self
_loadThread];
}
- (void)_loadViews
{
for (int i=0; i<15; i++)
{
int col=i%3;
int row=i/3;
UIImageView * imageView=[[UIImageView
alloc]initWithFrame:CGRectMake(22+col*(80+45),
40+row*(100+20),
90, 90)];
imageView.backgroundColor=[UIColor
redColor];
[self.imageArray
addObject:imageView];
[self.view
addSubview:imageView];
}
}
- (void)_loadThread
{
//开启多线程
NSOperationQueue * queue=[[NSOperationQueue
alloc]init];
for(int i=0;i<self.imageArray.count;i++)
{
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
//下载图片
NSString * imageSrc=@"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%d.jpg";
imageSrc=[NSString
stringWithFormat:imageSrc,i];
//拼接字符串
NSURL * URL = [NSURL
URLWithString:imageSrc];
NSData * data = [NSData
dataWithContentsOfURL:URL];
UIImage * image=[UIImage
imageWithData:data];
//获取主线程,刷新UI
NSOperationQueue * queue2=[NSOperationQueue
mainQueue];
[queue2
addOperationWithBlock:^{
//刷新图片,给imageView赋值
UIImageView * imageView=self.imageArray[i];
imageView.image=image;
}];
}];
[queue
addOperation: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=[[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(show)
object:nil];
[queue
addOperation:nvo];
// 2> 採用NSBlockOperation
来开启多线程(必须加入到队列)
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"我是block");
}];
[queue
addOperation:block];
// 3> 採用队列(不须又一次加入到队列)
[queue addOperationWithBlock:^{
NSLog(@"我是queue创建的block");
}];
// 4>
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"NSBlockOperation");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===1");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===2");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===3");
}];
[block
start];
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=[[NSOperationQueue
alloc]init];
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
//下载图片
{
}
//获取主线程。刷新UI
NSOperationQueue * queue2=[NSOperationQueue
mainQueue];
[queue2 addOperationWithBlock:^{
//刷新图片,给imageView赋值
{
}
}];
}];
[queue
addOperation:block];
实现的效果图例如以下:
详细代码例如以下:
//
// 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=[NSMutableArray
array];
}
return
_imageArray;
}
#pragma mark - 入口
- (void)viewDidLoad {
[super
viewDidLoad];
//载入视图
[self
_loadViews];
//开启多线程载入图片
[self
_loadThread];
}
- (void)_loadViews
{
for (int i=0; i<15; i++)
{
int col=i%3;
int row=i/3;
UIImageView * imageView=[[UIImageView
alloc]initWithFrame:CGRectMake(22+col*(80+45),
40+row*(100+20),
90, 90)];
imageView.backgroundColor=[UIColor
redColor];
[self.imageArray
addObject:imageView];
[self.view
addSubview:imageView];
}
}
- (void)_loadThread
{
//开启多线程
NSOperationQueue * queue=[[NSOperationQueue
alloc]init];
for(int i=0;i<self.imageArray.count;i++)
{
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
//下载图片
NSString * imageSrc=@"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%d.jpg";
imageSrc=[NSString
stringWithFormat:imageSrc,i];
//拼接字符串
NSURL * URL = [NSURL
URLWithString:imageSrc];
NSData * data = [NSData
dataWithContentsOfURL:URL];
UIImage * image=[UIImage
imageWithData:data];
//获取主线程,刷新UI
NSOperationQueue * queue2=[NSOperationQueue
mainQueue];
[queue2
addOperationWithBlock:^{
//刷新图片,给imageView赋值
UIImageView * imageView=self.imageArray[i];
imageView.image=image;
}];
}];
[queue
addOperation: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=[[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(show)
object:nil];
[queue
addOperation:nvo];
// 2> 採用NSBlockOperation
来开启多线程(必须加入到队列)
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"我是block");
}];
[queue
addOperation:block];
// 3> 採用队列(不须又一次加入到队列)
[queue addOperationWithBlock:^{
NSLog(@"我是queue创建的block");
}];
// 4>
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"NSBlockOperation");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===1");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===2");
}];
[block addExecutionBlock:^{
NSLog(@"NSBlockOperation===3");
}];
[block
start];
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=[[NSOperationQueue
alloc]init];
NSBlockOperation * block=[NSBlockOperation
blockOperationWithBlock:^{
//下载图片
{
}
//获取主线程。刷新UI
NSOperationQueue * queue2=[NSOperationQueue
mainQueue];
[queue2 addOperationWithBlock:^{
//刷新图片,给imageView赋值
{
}
}];
}];
[queue
addOperation:block];
相关文章推荐
- Android实战简易教程<四十九>(两种方式实现网络图片异步加载)
- SpringMVC 结合HttpClient调用第三方接口实现
- Android网络编程之JAVA IO流简单了解
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- 野人学Android基础篇之网络通讯第二课--本地apache服务器与Android的连接
- HttpUnit Ajax处理
- https 基础
- TCP 与 UDP
- Linux内核裁剪的具体步骤 http://blog.chinaunix.net/uid-10429687-id-3977273.html
- Vmware虚拟机下三种网络模式配置
- 对于linux下system()函数的深度理解(整理) (http://blog.sina.com.cn/s/blog_8043547601017qk0.html
- Linux库函数int system(const char*command)简析http://www.2cto.com/os/201209/156638.html
- TCP/IP协议三次握手与四次握手流程解析
- java 之 网络编程
- java http
- HDU 5456 Matches Puzzle Game 2015沈阳网络赛(记忆化搜索)
- 《深入理解Linux网络技术内幕》阅读笔记(四)
- HTTP协议 (七) Cookie
- HTTP协议响应码
- HTTP协议 (六) 状态码详解