使用NSoperation多线程异步加载图
NSoperation是ios封装好的的实现多线程的很简单的一种方法。
定义ImageDownloader,这个类继承NSOperation,因为需要并发,需要实现下面4个方法:
//是否允许并发,
-(BOOL)isConcurrent ;
-(BOOL)isExecuting;
//是否已经完成,这个必须要重载,不然放在NSOperationQueue里的NSOpertaion不能正常释放。
-(BOOL)isFinished
//具体下载的方法在这里执行。
-(void)start
而对应于非并发的情况下,只需要重载main方法就好了。
头文件
ImageDownloader.h
定义如下:
#import
@protocol imageDownloaderDelegate;
@interface ImageDownloader : NSOperation
{
}
- (id)initWithURLString:(NSString *)url;
@property (readonly) NSData *data;
@property(nonatomic, assign) id delegate;
@property(nonatomic, retain) NSObject *delPara;
@end
@protocol imageDownloaderDelegate
@optional
//图片下载完成的代理方法
- (void)imageDidFinished:(UIImage *)image para:(NSObject *)obj;
@end
实现文件
ImageDownloader.m
定义如下:
#import "ImageDownloader.h"
@implementation ImageDownloader
@synthesize data=_data;
@synthesize delegate;
@synthesize delPara;
- (void)dealloc
{
}
- (id)initWithURLString:(NSString *)url
{
}
//开始处理-本类的主方法
- (void)start {
}
#pragma mark NSURLConnection delegate Method
//接收到数据(增量)时
- (void)connection:(NSURLConnection*)connection
{
}
- (void)connectionDidFinishLoadi
}
-(void)connection: (NSURLConnection *) connection didFailWithError:(NSError *) error
{
}
-(BOOL)isConcurrent
{
}
- (BOOL)isExecuting
{
}
- (BOOL)isFinished
{
}
应用举例:
#pragma delegate
-
{
}