美文网首页iOS面试
NSOperation的基本使用

NSOperation的基本使用

作者: SK丿希望 | 来源:发表于2017-10-31 09:15 被阅读8次
    Paste_Image.png Paste_Image.png

    案例多图下载

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self blockOperation];
    }
    
    - (void)blockOperation
    {
        NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
            // 在主线程
            NSLog(@"下载1------%@", [NSThread currentThread]);
        }];
        
        // 添加额外的任务(在子线程执行)
        [op addExecutionBlock:^{
            NSLog(@"下载2------%@", [NSThread currentThread]);
        }];
    
        [op addExecutionBlock:^{
            NSLog(@"下载3------%@", [NSThread currentThread]);
        }];
        [op addExecutionBlock:^{
            NSLog(@"下载4------%@", [NSThread currentThread]);
        }];
        
        [op start];
    }
    

    NSInvocationOperation

    Paste_Image.png

    NSBlockOperation

    Paste_Image.png

    NSOperationQueue

    Paste_Image.png

    最大并发数

    Paste_Image.png

    队列的取消\恢复\暂停

    Paste_Image.png

    操作依赖

    Paste_Image.png

    操作监听

    Paste_Image.png

    自定义NSOperation

    Paste_Image.png

    自定义NSOperation图片下载思路--沙盒缓存

    Paste_Image.png

    自定义NSOperation图片下载思路--无沙盒缓存

    Paste_Image.png

    多图下载合成新图

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        
        __block UIImage *image1 = nil;
        // 下载图片1
        NSBlockOperation *download1 = [NSBlockOperation blockOperationWithBlock:^{
            
            // 图片的网络路径
            NSURL *url = [NSURL URLWithString:@"http://img.pconline.com.cn/images/photoblog/9/9/8/1/9981681/200910/11/1255259355826.jpg"];
            
            // 加载图片
            NSData *data = [NSData dataWithContentsOfURL:url];
            
            // 生成图片
            image1 = [UIImage imageWithData:data];
        }];
        
        __block UIImage *image2 = nil;
        // 下载图片2
        NSBlockOperation *download2 = [NSBlockOperation blockOperationWithBlock:^{
            
            // 图片的网络路径
            NSURL *url = [NSURL URLWithString:@"http://pic38.nipic.com/20140228/5571398_215900721128_2.jpg"];
    
            
            // 加载图片
            NSData *data = [NSData dataWithContentsOfURL:url];
            
            // 生成图片
            image2 = [UIImage imageWithData:data];
        }];
        
        // 合成图片
        NSBlockOperation *combine = [NSBlockOperation blockOperationWithBlock:^{
            // 开启新的图形上下文
            UIGraphicsBeginImageContext(CGSizeMake(100, 100));
            
            // 绘制图片
            [image1 drawInRect:CGRectMake(0, 0, 50, 100)];
            image1 = nil;
            
            [image2 drawInRect:CGRectMake(50, 0, 50, 100)];
            image2 = nil;
            
            // 取得上下文中的图片
            UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
            
            // 结束上下文
            UIGraphicsEndImageContext();
            
            // 回到主线程
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                self.imageView.image = image;
            }];
        }];
        [combine addDependency:download1];
        [combine addDependency:download2];
        
        [queue addOperation:download1];
        [queue addOperation:download2];
        [queue addOperation:combine];
    }
    
    

    相关文章

      网友评论

        本文标题:NSOperation的基本使用

        本文链接:https://www.haomeiwen.com/subject/jxmvpxtx.html