博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS NSOperation使用
阅读量:6230 次
发布时间:2019-06-21

本文共 2756 字,大约阅读时间需要 9 分钟。

hot3.png

////  NSOperationViewController.m//  DemoTest////  Created by biyabi on 15/8/18.//  Copyright (c) 2015年 test. All rights reserved.//#import "NSOperationViewController.h"#import "HeadFile.h"#define imageURL @"http://images.cnitblog.com/blog/381483/201408/221614287532594.png"#define imageURLCache @"http://c11.eoemarket.com/upload/2011/1213/apps/64183/screenshots/95489.png"#define imageURLEnd @"http://img1.ali213.net/picfile/News/2012/06/25/am/he24.jpg"@interface NSOperationViewController ()@property (nonatomic, strong) UIImageView *imageView;@end@implementation NSOperationViewController- (void)viewDidLoad {    [super viewDidLoad];    [self.view setBackgroundColor:[UIColor whiteColor]];    self.title = @"NSOperation";    [self initUI];        NSOperationQueue *queue = [[NSOperationQueue alloc]init];        //方式一:    //    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(threadRun:) object:imageURL];    //    [queue addOperation:operation];        //方式二:有依赖关系的 就是要线程A和线程B先执行完毕,才能执行线程C    __weak typeof(self) weakself = self;    NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{        [weakself threadRun:imageURL];    }];        NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{        [weakself threadRun:imageURLCache];    }];        NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{        [weakself threadRun:imageURLEnd];    }];        [operationA addDependency:operationB];    [operationA addDependency:operationC];        [queue addOperation:operationA];    [queue addOperation:operationB];    [queue addOperation:operationC];    }- (void)threadRun:(NSString *)url{    NSData *data = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:url]];    UIImage *image = [[UIImage alloc]initWithData:data];    if (!data) {        return;    }    [self performSelectorOnMainThread:@selector(updataImage:) withObject:image waitUntilDone:YES];}- (void)updataImage:(UIImage *)image{    [self.imageView setImage:image];}- (void)initUI{    self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake((ScreenWidth-200)/2, (ScreenHeight-200)/2, 200, 200)];    [self.view addSubview:self.imageView];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end

转载于:https://my.oschina.net/caijunrong/blog/493893

你可能感兴趣的文章
java之collection总结
查看>>
提升控件绘制速度
查看>>
封装自用的脚本ajax.js
查看>>
SQL左、右、内、全连接
查看>>
Ehcache 整合Spring 使用页面、对象缓存
查看>>
哈哈哈哈哈哈哈
查看>>
wordpress学习四: 一个简单的自定义主题
查看>>
04文件操作1
查看>>
Asp.net mvc 3 - JSONResult return array
查看>>
Spring MVC - log4j 配置
查看>>
c# WF 第6节 MDI窗体
查看>>
杂七杂八
查看>>
RabbitMQ 消息确认机制
查看>>
简单的新浪微博OAuth认证实现
查看>>
Mybatis表关联一对多
查看>>
Spring_Aop基于配置文件
查看>>
R cannot be resolved的几种可能 R not generated
查看>>
随机快速排序
查看>>
linux下创建用户、用户组及赋予sudoer权限
查看>>
简述Hibernate配置连接池
查看>>