多线程之NSInvocationOperation
多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在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编程中是经常被用到的。
分享到:
相关推荐
iphone多线程编程,值得一看的好书,iphone开发初学者必看。
线程是单个应用中可以并发执行多个代码路径的多种技术之一。虽然更新的技术如操作对象(Operation objects)和Grand Central Dispatch(GCD),提供一个更加现代化和高效率的基础设施来实现多核并发,但是Mac OS X和...
非常详细、经典的ios平台多线程知识详细的文档(其它平台的开发者也可以参考)。 两个中英文的高质量的pdf文件,也可做为英文学习用。
iPhone 多线程 多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c...这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。
比较详细的讲解了ios下多线程开发的技术,很实用。
帮助学习关于OC中内存管理的知识点
不管使用任何编程语言,在实现多线程时都是一件很麻烦的事情。更糟糕的是,一旦出错,这种错误通常相当糟糕。然而,幸运的是apple从os x10.5在这方面做了很多的改进,NSThread的引入,使得开发多线程应用程序容易多...
在本文中,您将学习如何组织和调试SWIFT代码、使用Grand Central Dispatp进行多线程编程、在视图控制器之间传递数据以及为多种语言设计应用程序的技巧。这是最畅销的iPhone开发入门版SWIFT的后续工作。您还将看到...
多线程的设计给程序员带来了很大的便利,在iphONe的开发中也想java那样可以方便的实现多线程编程。 于是,笔者在iphone的开发中实现多线程编程,这个例子是大家熟悉的Java教程中经典的“售票系统多线程”。 下面...
多线程的设计给程序员带来了很大的便利,在iphone的开发中也想java那样可以方便的实现多线程编程。 于是,笔者在iphone的开发中实现多线程编程,这个例子是大家熟悉的Java教程中经典的“售票系统多线程”。 下面...
内容包括:iPhone开发进阶;iPhone入门开发经验之谈;多线程编程指南;浅析iPhone用户界面设计精粹,从细节成就卓越
包括了从入门到升入的教程:初学Objective-C、Cocoa基本原理指南、iOS5 ARC 完全指南、iOS图像处理、OpenGL ES学习、多线程编程指南、核心动画编程指南
iOS人机界面指导手册.pdf ...多线程编程指南.pdf 初窥Xcode4 -- Xcode4主题样式、快捷键等常用设置.pdf From C++ to Objective-C.pdf 内存管理编程指南.pdf Cocoa 编码指南.pdf Objective-C培训资料.pdf
了解了Operation Queue是一个面向对象的并发编程接口,它支持并发数,线程优先级,任务优先级,任务依赖关系等多种配置,可以方便满足各种复杂的多任务处理场景
15 章 用 Grand Central Dispatch 进行多线程编程 364 第 16 章 图形与绘制 386 第 17 章 SpriteKit 制作简单游戏 405 第 18 章 轻点、触摸和手势 438 第 19 章 确定位置 457 第 20 章 设备方向与动作 472 第 21 章 ...
斯坦福工程 cs193p:使用 Swift 开发 iOS 8 应用程序这个 repo 包含我在斯坦福大学工程学院提供的 Paul ... 涵盖的其他主题包括动画、移动设备电源管理、多线程、网络和性能注意事项。支持或联系访问以查看更多信息。
在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 ...