您的位置:首页 > 理论基础 > 计算机网络

多线程下载三张图片(采用线程类,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: