自定义nsoperation的用法
2013-06-26 21:40 甘超波 阅读(1369) 评论(0) 编辑 收藏 举报#import <Foundation/Foundation.h> typedef void (^DownloadCompletionBlock)(UIImage *image); @interface DownloadOperation : NSOperation // 图片的url地址 @property (nonatomic, copy) NSString *url; // retain对block没有作用,只能用copy @property (nonatomic, copy) DownloadCompletionBlock downloadCompletionBlock; @end ============================ #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作 - (void)main { // main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池 // 因此,在这里新建一个属于当前线程的自动释放池 @autoreleasepool { // 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消 if (self.isCancelled) { return; } NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; // 执行了比较耗时的操作后也需要检测该操作是否已经被取消 if (self.isCancelled) { return; } // 调用Block,传递图片出去 if (_downloadCompletionBlock) { UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ _downloadCompletionBlock(image); }); } } } - (void)dealloc { [_url release]; [_downloadCompletionBlock release]; [super dealloc]; } @end
#import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作 - (void)main { // main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池 // 因此,在这里新建一个属于当前线程的自动释放池 @autoreleasepool { // 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消 if (self.isCancelled) { return; } NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; // 执行了比较耗时的操作后也需要检测该操作是否已经被取消 if (self.isCancelled) { return; } // 调用Block,传递图片出去 if (_downloadCompletionBlock) { UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ _downloadCompletionBlock(image); }); } } } - (void)dealloc { [_url release]; [_downloadCompletionBlock release]; [super dealloc]; } @end ========================================= #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作 - (void)main { // main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池 // 因此,在这里新建一个属于当前线程的自动释放池 @autoreleasepool { // 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消 if (self.isCancelled) { return; } NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; // 执行了比较耗时的操作后也需要检测该操作是否已经被取消 if (self.isCancelled) { return; } // 调用Block,传递图片出去 if (_downloadCompletionBlock) { UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ _downloadCompletionBlock(image); }); } } } - (void)dealloc { [_url release]; [_downloadCompletionBlock release]; [super dealloc]; } @end
#import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作 - (void)main { // main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池 // 因此,在这里新建一个属于当前线程的自动释放池 @autoreleasepool { // 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消 if (self.isCancelled) { return; } NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; // 执行了比较耗时的操作后也需要检测该操作是否已经被取消 if (self.isCancelled) { return; } // 调用Block,传递图片出去 if (_downloadCompletionBlock) { UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ _downloadCompletionBlock(image); }); } } } - (void)dealloc { [_url release]; [_downloadCompletionBlock release]; [super dealloc]; } @end ========================================= #import "DownloadOperation.h" @implementation DownloadOperation #pragma mark 在这里添加想要执行的操作 - (void)main { // main方法可能在异步线程调用,这样就不恩能够访问主线程的自动释放池 // 因此,在这里新建一个属于当前线程的自动释放池 @autoreleasepool { // 取消操作发生在任何时刻都有可能,因此在执行任何操作之前,先检测该操作是否已经被取消 if (self.isCancelled) { return; } NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]]; // 执行了比较耗时的操作后也需要检测该操作是否已经被取消 if (self.isCancelled) { return; } // 调用Block,传递图片出去 if (_downloadCompletionBlock) { UIImage *image = [UIImage imageWithData:data]; dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ _downloadCompletionBlock(image); }); } } } - (void)dealloc { [_url release]; [_downloadCompletionBlock release]; [super dealloc]; } @end
目前我正在专注NLP,请立刻加微信/QQ号 546611623, 免费送你原创《NLP高级执行师》高清视频