多线程之NSOperation
1、将想在另外一个线程的工作单独成类,并设置其父类为NSOperation
- @interface ImageLoadingOperation : NSOperation {
- //需要传入一个图片地址,所以定义一个NSURL变量
- NSURL *imageURL;
- //由于需要返回一些值,所以需要一个对象参数返回要被返回的对象(运行此线程的类对象)
- id target;
- //返回值要激发的方法函数
- SEL action;
- }
2、借由其初始化方法来传入所需要的参数和对象
- - (id)initWithImageURL:(NSURL *)theImageURL target:(id)theTarget action:(SEL)theAction
- {
- self = [super init];
- if (self) {
- //拷贝进对象,并retain
- imageURL = [theImageURL retain];
- target = theTarget;
- action = theAction;
- }
- return self;
- }
初始化这个类的时候,传入所需要的参数和对象
- //这些是需要对其初始化的类中的代码
- //初始化
- ImageLoadingOperation *operation = [[ImageLoadingOperation alloc] initWithImageURL:url target:self action:@selector(didFinishLoadingImageWithResult:)];
- //添加到运行队列
- [operationQueue addOperation:operation];
- //由于队列对其retain,所以需要release它
- [operation release];
3、在线程操作类中的main函数执行所需要的工作
- - (void)main
- {
- //载入图片
- NSData *data = [[NSData alloc] initWithContentsOfURL:imageURL];
- UIImage *image = [[UIImage alloc] initWithData:data];
- //打包返回给初始类对象,然后执行其指定的操作
- NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys:image, ImageResultKey, imageURL, URLResultKey, nil];
- [target performSelectorOnMainThread:action withObject:result waitUntilDone:NO];
- [data release];
- [image release];
- }
这些就是一个简单的NSOperation的使用过程