Objective-C的NSOperation多线程类基本使用指南

2020-01-14 19:04:47王旭

* 在循环的每次迭代过程中,如果每个迭代相对较长可能需要调用多次
* 代码中相对比较容易中止操作的任何地方
DownloadOperation的main方法实现如下
复制代码
- (void)main {  
    // 新建一个自动释放池,如果是异步执行操作,那么将无法访问到主线程的自动释放池  
    @autoreleasepool {  
        if (self.isCancelled) return;  
          
        // 获取图片数据  
        NSURL *url = [NSURL URLWithString:self.imageUrl];  
        NSData *imageData = [NSData dataWithContentsOfURL:url];  
          
        if (self.isCancelled) {  
            url = nil;  
            imageData = nil;  
            return;  
        }  
          
        // 初始化图片  
        UIImage *image = [UIImage imageWithData:imageData];  
          
        if (self.isCancelled) {  
            image = nil;  
            return;  
        }  
          
        if ([self.delegate respondsToSelector:@selector(downloadFinishWithImage:)]) {  
            // 把图片数据传回到主线程  
            [(NSObject *)self.delegate performSelectorOnMainThread:@selector(downloadFinishWithImage:) withObject:image waitUntilDone:NO];