文档章节

多线程之NSInvocationOperation

JeansH
 JeansH
发布于 2012/07/20 15:53
字数 492
阅读 794
收藏 5

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

本次介绍NSOperation的子集,简易方法的NSInvocationOperation:

@implementation MyCustomClass
 
- (void)launchTaskWithData:(id)data
{
    //创建一个NSInvocationOperation对象,并初始化到方法
    //在这里,selector参数后的值是你想在另外一个线程中运行的方法(函数,Method)
    //在这里,object后的值是想传递给前面方法的数据
    NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:self
                    selector:@selector(myTaskMethod:) object:data];
 
    // 下面将我们建立的操作“Operation”加入到本地程序的共享队列中(加入后方法就会立刻被执行)
    // 更多的时候是由我们自己建立“操作”队列
    [[MyAppDelegate sharedOperationQueue] addOperation:theOp];
}
 
// 这个是真正运行在另外一个线程的“方法”
- (void)myTaskMethod:(id)data
{
    // Perform the task.
}
 
@end

一个NSOperationQueue 操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等。下面是建立并初始化一个操作队列:

@interface  MyViewController : UIViewController {
 
    NSOperationQueue *operationQueue;
    //在头文件中声明该队列
}
@end 
 
@implementation MyViewController
 
- (id)init
{
    self = [super init];
    if (self) {
        operationQueue = [[NSOperationQueue alloc] init]; //初始化操作队列
        [operationQueue setMaxConcurrentOperationCount:1];
        //在这里限定了该队列只同时运行一个线程
        //这个队列已经可以使用了
    }
    return self;
}
 
- (void)dealloc
{
    [operationQueue release];
    //正如Alan经常说的,我们是程序的好公民,需要释放内存!
    [super dealloc];
}
 
@end

简单介绍之后,其实可以发现这种方法是非常简单的。很多的时候我们使用多线程仅仅是为了防止主线程堵塞,而NSInvocationOperation就是最简单的多线程编程,在iPhone编程中是经常被用到的。

本文转载自:http://www.cnblogs.com/chen1987lei/archive/2011/04/28/2032253.html

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

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

长平狐
2012/08/13
41
0
多线程之NSInvocationOperation

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

长平狐
2013/03/19
66
0
多线程

1、基本概念 什么是进程: 进程是在系统中运行的一个程序,每个进程之间是独立的,每个进程均运⾏在其专有且受保护的内存空间内。 什么是线程: ⼀个进程想要执⾏任务,必须得有线程(⾄少一个线程...

魏萌萌丶
2016/09/08
50
0
iOS多线程编程之NSOperation和NSOperationQueue的使用

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

malawo
2013/09/05
0
0
iOS OS X 和 iOS 中的多线程技术-4 (NSOperation)

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一NSOperation: 1.NSOperation做的事情比 NSThread 更多一些。通过继承 NSOperation,可以使子类获得一些线程相关的特性,进而可以安全地管理线...

石虎132
2017/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dos echo指令显示“echo处于打开状态”

dos echo指令显示“echo处于打开状态” 我用一下代码想输出 aa 变量。 一个bat文件,文件内容是: set aa = "123"echo %aa%pause 找到答案了。 set aa="123"echo %aa%pause 在aa=...

shzwork
14分钟前
2
0
【行为型】- 责任链模式

责任链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止(如果权限不够则直接跳转)...

ZeroneLove
16分钟前
1
0
Harbor快速部署到Kubernetes集群及登录问题解决

Harbor(https://goharbor.io)是一个功能强大的容器镜像管理和服务系统,用于提供专有容器镜像服务。随着云原生架构的广泛使用,原来由VMWare开发的Harbor也加入了云原生基金会(参考《Har...

openthings
今天
2
0
MQ学习-基本概念区分

消息队列 Kafka 涉及的专有名词和术语进行定义和解释,方便您更好地理解相关概念并使用该产品。 Broker: 消息队列 Kafka 集群包含一个或多个消息处理服务器,该服务器被称为 Broker。 Topi...

os1cheng
今天
5
0
腾讯怒怼:靠红包骗用户下载怎么可以叫产品

近日,社交圈出现了大动荡,三款新推出的社交软件全部被微信封杀,对此,腾讯公关总监在回应外界对于1月15日三款社交新产品撼动微信的消息,他呼吁媒体在批评的同时应当尊重事实,“我们尊重...

linux-tao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部