文档章节

iOS NSOperation使用

神补刀
 神补刀
发布于 2015/08/18 12:03
字数 297
阅读 76
收藏 0
//
//  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

本文转载自:

神补刀
粉丝 19
博文 78
码字总数 38937
作品 0
广州
程序员
私信 提问
关于iOS多线程,这边勉强可以看看(OC&Swift)

iOS开发多线程总是绕不过的坎,看了很多前辈们优秀的文章,如:关于iOS多线程,我说,你听,没准你就懂了!、谈iOS多线程(NSThread、NSOperation、GCD)编程、iOS多线程:『GCD』详尽总结、i...

Andy_Ron
2018/08/26
0
0
文檔翻譯:NSOperation Class Reference

NSOperation Class Reference NSOperation 類參考 http://db.tt/A1xLPVXq。(排版較佳) 原文網址:http://developer.apple.com/documentation/Cocoa/Reference/NSOperation_class/Referenc......

KSHime
2012/09/18
528
0
ios 多线程 网络编程

如何在IOS中实现多线程网络编程,实现两个线程并发访问一个资源,我在数据连接类中实现了 NSURLConnectionDataDelegate,但是试了NSOPeration和GCD的方法,都没有成功,求高人指点迷津,谢谢...

七伽杜
2016/01/15
151
2
iOS多线程编程之NSOperation和NSOperationQueue的使用

目录(?)[-] iOS多线程编程之NSThread的使用 使用 NSOperation的方式有两种 一种是用定义好的两个子类 另一种是继承NSOperation NSInvocationOperation例子 第二种方式继承NSOperation 如何控...

malawo
2013/09/05
36
0
SwiftCon China 2016

SwiftCon China 2016来了,4月23日~24日,我们在老地方等你。 在2015年的圣诞节前,SwiftCon以Alpha Show的形式首次亮相,就立刻得到Swift社区的广泛关注。无论是在大会现场,还是在大会后的...

Think技术社区
2016/03/11
51
0

没有更多内容

加载失败,请刷新页面

加载更多

toast组件单元测试

先看是否存在 describe('Toast', () => { it('存在.', () => { expect(Toast).to.be.exist }) }); 看属性,我们要测 ToastVue 和 plugin.js describe('Toast', () =>......

ories
21分钟前
57
0
如何将整个MySQL数据库字符集和排序规则转换为UTF-8?

如何将整个MySQL数据库字符集转换为UTF-8并将排序规则转换为UTF-8? #1楼 在命令行外壳上 如果您是命令行外壳程序之一,则可以非常快速地执行此操作。 只需填写“ dbname”:D DB="dbname"(...

javail
今天
80
0
开源矿工系统内部的层

开源矿工系统内部的层 所谓“层”、“界”、“域”、“集合”,这些词其实是在试图表达物质系统的组成结构和运动景象中的规矩,这些不同人发明的词都是来源于对同一个规律的观察、发现、表达...

NTMiner
今天
88
0
如何将文件从一个git repo移到另一个(不是克隆),保留历史记录

我们的Git储存库是作为单个Monster SVN储存库的一部分开始的,其中每个项目都有自己的树,如下所示: project1/branches /tags /trunkproject2/branches /tags ...

技术盛宴
今天
65
0
数据结构之数组-c代码实现

在上一篇文章里讲了数组的具体内容,然后自己使用c语言对数组进行了实现。 其中定义了一个结构体,定义了长度、已使用长度和地址指针。 定义alloc函数来分配内存空间 之后便是插入元素的ins...

无心的梦呓
今天
65
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部