多线程下载三张图片(采用线程类,ASIHttp)
2013-05-12 23:07
309 查看
更新上一篇文章,这次是使用队列请求下载三张图片,本人因一小问题纠结了两天终于搞定了,分享给大家看看,有建议的直接Q我715425534
------------------------------ViewController.h-------------------------------
#import <UIKit/UIKit.h>
#import "Thread.h"
@interface ThreadViewController :
UIViewController<ControControllerDelegate>
@property (retain,
nonatomic) Thread *thread;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageOne;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageTwo;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageThree;
@property (retain,
nonatomic) NSMutableArray *imageArray;
@property (retain,
nonatomic) UIImageView *whichImageView;
@property (retain,
nonatomic) IBOutlet
UIActivityIndicatorView *activityIndicatorOne;
-(IBAction)downloadOne:(id)sender;
@end
------------------------------ViewController.m-------------------------------
#import "ThreadViewController.h"
@interface
ThreadViewController ()
@end
@implementation ThreadViewController
@synthesize imageOne,imageTwo,thread,activityIndicatorOne,imageThree,imageArray,whichImageView;
- (void)viewDidLoad
{
[super
viewDidLoad];
self.title =
@"多线程Demo";
thread = [[Thread
alloc]init];
self.activityIndicatorOne.hidesWhenStopped =
YES;
imageArray = [[NSMutableArray
alloc]initWithObjects:imageOne,imageTwo,imageThree,
nil];
}
-(void)viewDidUnload
{
[thread
release];
[super
viewDidUnload];
}
-(IBAction)downloadOne:(id)sender
{
[activityIndicatorOne
startAnimating];
NSArray *urlArray = [NSArray
arrayWithObjects:@"http://imgstatic.baidu.com/img/image/shouye/mingxingzhuanji.jpg",@"http://h.hiphotos.baidu.com/album/w%3D2048/sign=d54ead720824ab18e016e63701c2e7cd/8b82b9014a90f603f4a5d4133812b31bb051ed49.jpg",@"http://a.hiphotos.baidu.com/album/w%3D230/sign=7c74fdfca2cc7cd9fa2d33da09002104/0823dd54564e925801d260ff9d82d158ccbf4e39.jpg",
nil];
[self.thread
creatSubThread:urlArray];
self.thread.delegate =
self;
}
#pragma mark - ControControllerDelegate
-(void)sendResponsedataTOController:(NSMutableArray *)responseArray
{
if (responseArray !=
nil)
{
for (int j = 0; j<[responseArray
count]; j++)
{
whichImageView = [imageArray
objectAtIndex:j];
whichImageView.image = [UIImage
imageWithData:[responseArray objectAtIndex:j]];
[self.activityIndicatorOne
stopAnimating];
}
}
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
}
- (void)dealloc {
[imageOne
release];
[imageTwo
release];
[imageThree
release];
[imageArray
release];
[whichImageView
release];
[UIActivityIndicatorView
release];
[super
dealloc];
}
@end
------------------------------Thread.h-------------------------------
#import <Foundation/Foundation.h>
#import "ASIHTTPRequest.h"
#import "ASINetworkQueue.h"
@protocol ControControllerDelegate;
@protocol ControControllerDelegate <NSObject>
@required
-(void)sendResponsedataTOController:(NSMutableArray*)responseArray;
@end
@interface Thread :
NSObject
@property (nonatomic,
assign) id<ControControllerDelegate>delegate;
@property (retain,
nonatomic) ASINetworkQueue *networkQueue;
@property (retain,
nonatomic) NSMutableArray *responseArray;
//创建子线程
-(void)creatSubThread:(NSArray*)urlArray;
//子线程的方法
-(void)subThreadMethod:(NSURL*)url;
@end
------------------------------Thread.m-------------------------------
#import "Thread.h"
@implementation Thread
//创建子线程
-(void)creatSubThread:(NSArray*)urlArray
{
[NSThread
detachNewThreadSelector:@selector(subThreadMethod:)
toTarget:self
withObject:urlArray];
}
//子线程的方法
-(void)subThreadMethod:(NSArray*)urlArray
{
if (![self
networkQueue])
{
_networkQueue = [[[ASINetworkQueue
alloc]init]autorelease];
}
[_networkQueue
setDelegate:self];
//请求失败执行的方法
[_networkQueue
setRequestDidFailSelector:@selector(requestFailed)];
//请求完成执行的方法
[_networkQueue
setRequestDidFinishSelector:@selector(requestFinished:)];
//队列请求完成执行的方法
[_networkQueue
setQueueDidFinishSelector:@selector(queueDidFinishSelector)];
//避免队列请求中一个请求失败,终止全部未完成的请求
[_networkQueue
setShouldCancelAllRequestsOnFailure:NO];
for (int a = 0; a<[urlArray
count]; a++) {
NSURL *url = [NSURL
URLWithString:[urlArray objectAtIndex:a]];
ASIHTTPRequest *request = [ASIHTTPRequest
requestWithURL:url];
[_networkQueue
addOperation:request];//network is an NSOperationQueue
}
[_networkQueue
go];
}
//请求完成
-(void)requestFinished:(ASIHTTPRequest*)request
{
if (![self
responseArray]) {
//存储请求返回的Data数据的数组
_responseArray = [[NSMutableArray
alloc]init];
}
//请求返回的数据
NSData *requestData = [request
responseData];
[_responseArray
addObject:requestData];
NSLog(@"responseArray----count-----:%i",[_responseArray
count]);
//判断是否遵循协议
if ([self.delegate
conformsToProtocol:@protocol(ControControllerDelegate)])
{
[self.delegate
sendResponsedataTOController:_responseArray];
}
NSLog(@"请求完成");
}
//请求失败
-(void)requestFailed:(ASIHTTPRequest*)request
{
NSLog(@"请求失败");
}
//队列请求完成
-(void)queueDidFinishSelector
{
NSLog(@"队列完成");
}
@end
------------------------------ViewController.h-------------------------------
#import <UIKit/UIKit.h>
#import "Thread.h"
@interface ThreadViewController :
UIViewController<ControControllerDelegate>
@property (retain,
nonatomic) Thread *thread;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageOne;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageTwo;
@property (retain,
nonatomic) IBOutlet
UIImageView *imageThree;
@property (retain,
nonatomic) NSMutableArray *imageArray;
@property (retain,
nonatomic) UIImageView *whichImageView;
@property (retain,
nonatomic) IBOutlet
UIActivityIndicatorView *activityIndicatorOne;
-(IBAction)downloadOne:(id)sender;
@end
------------------------------ViewController.m-------------------------------
#import "ThreadViewController.h"
@interface
ThreadViewController ()
@end
@implementation ThreadViewController
@synthesize imageOne,imageTwo,thread,activityIndicatorOne,imageThree,imageArray,whichImageView;
- (void)viewDidLoad
{
[super
viewDidLoad];
self.title =
@"多线程Demo";
thread = [[Thread
alloc]init];
self.activityIndicatorOne.hidesWhenStopped =
YES;
imageArray = [[NSMutableArray
alloc]initWithObjects:imageOne,imageTwo,imageThree,
nil];
}
-(void)viewDidUnload
{
[thread
release];
[super
viewDidUnload];
}
-(IBAction)downloadOne:(id)sender
{
[activityIndicatorOne
startAnimating];
NSArray *urlArray = [NSArray
arrayWithObjects:@"http://imgstatic.baidu.com/img/image/shouye/mingxingzhuanji.jpg",@"http://h.hiphotos.baidu.com/album/w%3D2048/sign=d54ead720824ab18e016e63701c2e7cd/8b82b9014a90f603f4a5d4133812b31bb051ed49.jpg",@"http://a.hiphotos.baidu.com/album/w%3D230/sign=7c74fdfca2cc7cd9fa2d33da09002104/0823dd54564e925801d260ff9d82d158ccbf4e39.jpg",
nil];
[self.thread
creatSubThread:urlArray];
self.thread.delegate =
self;
}
#pragma mark - ControControllerDelegate
-(void)sendResponsedataTOController:(NSMutableArray *)responseArray
{
if (responseArray !=
nil)
{
for (int j = 0; j<[responseArray
count]; j++)
{
whichImageView = [imageArray
objectAtIndex:j];
whichImageView.image = [UIImage
imageWithData:[responseArray objectAtIndex:j]];
[self.activityIndicatorOne
stopAnimating];
}
}
}
- (void)didReceiveMemoryWarning
{
[super
didReceiveMemoryWarning];
}
- (void)dealloc {
[imageOne
release];
[imageTwo
release];
[imageThree
release];
[imageArray
release];
[whichImageView
release];
[UIActivityIndicatorView
release];
[super
dealloc];
}
@end
------------------------------Thread.h-------------------------------
#import <Foundation/Foundation.h>
#import "ASIHTTPRequest.h"
#import "ASINetworkQueue.h"
@protocol ControControllerDelegate;
@protocol ControControllerDelegate <NSObject>
@required
-(void)sendResponsedataTOController:(NSMutableArray*)responseArray;
@end
@interface Thread :
NSObject
@property (nonatomic,
assign) id<ControControllerDelegate>delegate;
@property (retain,
nonatomic) ASINetworkQueue *networkQueue;
@property (retain,
nonatomic) NSMutableArray *responseArray;
//创建子线程
-(void)creatSubThread:(NSArray*)urlArray;
//子线程的方法
-(void)subThreadMethod:(NSURL*)url;
@end
------------------------------Thread.m-------------------------------
#import "Thread.h"
@implementation Thread
//创建子线程
-(void)creatSubThread:(NSArray*)urlArray
{
[NSThread
detachNewThreadSelector:@selector(subThreadMethod:)
toTarget:self
withObject:urlArray];
}
//子线程的方法
-(void)subThreadMethod:(NSArray*)urlArray
{
if (![self
networkQueue])
{
_networkQueue = [[[ASINetworkQueue
alloc]init]autorelease];
}
[_networkQueue
setDelegate:self];
//请求失败执行的方法
[_networkQueue
setRequestDidFailSelector:@selector(requestFailed)];
//请求完成执行的方法
[_networkQueue
setRequestDidFinishSelector:@selector(requestFinished:)];
//队列请求完成执行的方法
[_networkQueue
setQueueDidFinishSelector:@selector(queueDidFinishSelector)];
//避免队列请求中一个请求失败,终止全部未完成的请求
[_networkQueue
setShouldCancelAllRequestsOnFailure:NO];
for (int a = 0; a<[urlArray
count]; a++) {
NSURL *url = [NSURL
URLWithString:[urlArray objectAtIndex:a]];
ASIHTTPRequest *request = [ASIHTTPRequest
requestWithURL:url];
[_networkQueue
addOperation:request];//network is an NSOperationQueue
}
[_networkQueue
go];
}
//请求完成
-(void)requestFinished:(ASIHTTPRequest*)request
{
if (![self
responseArray]) {
//存储请求返回的Data数据的数组
_responseArray = [[NSMutableArray
alloc]init];
}
//请求返回的数据
NSData *requestData = [request
responseData];
[_responseArray
addObject:requestData];
NSLog(@"responseArray----count-----:%i",[_responseArray
count]);
//判断是否遵循协议
if ([self.delegate
conformsToProtocol:@protocol(ControControllerDelegate)])
{
[self.delegate
sendResponsedataTOController:_responseArray];
}
NSLog(@"请求完成");
}
//请求失败
-(void)requestFailed:(ASIHTTPRequest*)request
{
NSLog(@"请求失败");
}
//队列请求完成
-(void)queueDidFinishSelector
{
NSLog(@"队列完成");
}
@end
相关文章推荐
- 多线程下载之断点续传采用随机文件读取流,HttpConnection实现
- 采用AFNetWorking 上传base64的图片到服务器,上传的图片解析不了。ASIHttpRequest上传是可以的,请教!
- ASIHTTPRequest 下载图片
- asihttprequest下载例子,集进度条和字节数显示,多线程异步下载,断点续传,解压缩
- ASIHttprequest 下载图片的代码例子
- iOS 使用ASIHTTPRequest实现图片下载,断点续传,cell自定义
- ASIHttprequest 下载图片的例子
- ios中asihttprequest 下载缓存
- iOS Asihttp上传文件(图片等)以及服务端的代码(c#,.net Web api2)
- HttpURLConnection从网上下载图片
- java网络编程之Http多线程下载应用实例
- ASIHttpRequest下载请求
- .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类
- httpClient下载图片
- ASIHTTP 框架,同步、 异步请求、 上传 、 下载
- ios (ASIHTTPRequest)获取下载文件大小(size)
- ASIHTTPRequest-断点续传(下载)
- IOS上传多张图片(ASIHTTPRequest)
- python 多线程下载图片
- Android/java http多线程断点下载(附源码)