文档章节

多线程 之 NSOperation

JeansH
 JeansH
发布于 2012/07/20 15:18
字数 483
阅读 708
收藏 0

T 多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。

本次讲解NSOperation的使用方法:

1,将想在另外一个线程的工作单独成类,并设置其父类为NSOperation:

@interface  ImageLoadingOperation : NSOperation {     NSURL *imageURL; //这个例子里面需要传入一个图片地址,所以定义一个NSURL变量     id target; //由于需要返回一些值,所以需要一个对象参数返回要被返回的对象(运行此线程的类对象)     SEL action; //返回值要激发的方法函数 }

2,借由其初始化方法来传入所需要的参数和对象

- (id)initWithImageURL:(NSURL *)theImageURL target:(id)theTarget action:(SEL)theAction{     self = [super init]; //在老帖里面解释过为什么需要这么做了     if (self) {         imageURL = [theImageURL retain]; // 拷贝进对象,并retain(为什么?请查老帖)         target = theTarget;
        action = theAction;
    }     return self;}

呼叫这个类对象的时候,传入所需要的参数和对象

// 这些是需要对其初始化的类中的代码 ImageLoadingOperation *operation = [[ImageLoadingOperation alloc] initWithImageURL:url target:self action:@selector(didFinishLoadingImageWithResult:)];  //初始化 [operationQueue addOperation:operation]; //添加到运行队列 [operation release];  //由于队列对其retain,所以我们需要release它

3,在我们的线程操作类中的main函数执行所需要的工作

- (void)main{     // 同时载入图片     NSData *data = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage *image = [[UIImage alloc] initWithData:data];
 
    // 打包返回给初始类对象,然后执行其指定的操作     NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys:image, ImageResultKey, imageURL, URLResultKey, nil];
    [target performSelectorOnMainThread:action withObject:result waitUntilDone:NO];
 
    [data release]; //不需要了就清理     [image release];}

这些就是一个简单的NSOperation的使用过程了。其实看看嘛,非常简单的,正如苹果为我们准备的其他API一样!


本文转载自:http://c.gzl.name/archives/137

共有 人打赏支持
JeansH
粉丝 43
博文 49
码字总数 5995
作品 0
深圳
程序员
私信 提问
【iOS】多线程NSOperation

NSOperation是苹果封装的一套多线程的东西,不像GCD是纯C语言的,这个是OC的。但相比较之下GCD会更快一些,但本质上NSOPeration是多GDC的封装。 一、NSOperation与GCD的比较 GCD是基于c的底层...

xn4545945
2014/07/28
0
0
iOS multiple threads(2)------NSOperation NSOper...

首先,简单区分这几个类关键词: NSOperation:可以理解程一个“操作”,一个要做的事件,感觉类似如java中的runnable,NSOperation只有添加到线程队列中才能被执行。 NSOperationQueue:可以...

辉兔狼
2013/03/18
0
0
iOS GCD~performSelector、dispatch_once、NSOperation总结

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、使用GCD 替代 performSelector 系列方法 NSObject 的 performSelector 系列方法有很多限制。传给要执行的方法的参数的数量是有限制的,也没...

石虎132
2017/12/05
0
0
iOS 多线程 - 回答你关于线程的所有问题

先从最基本的概念性问题开始 (1)进程:在系统中正在运行的一个应用程序(比如QQ、播放器等),每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。 (2)线程:一个进程的...

linweida
2016/09/10
3
0
iOS多线程编程之NSOperation和NSOperationQueue的使用

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

malawo
2013/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 世界的源代码

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小鱼丁 :#今日歌曲推荐# 分享Jason Mraz的单曲《Prettiest Friend (Demo)》: 《Prettiest Friend (Demo)》- Jason Mraz 手机党少年们想听歌...

小小编辑
今天
59
5
java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
10
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
6
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部