`

iOS多线程编程之NSOperation和NSOperationQueue的使用 .

    博客分类:
  • ios
阅读更多
使用 NSOperation的方式有两种,
一种是用定义好的两个子类:
NSInvocationOperation 和 NSBlockOperation。

另一种是继承NSOperation
如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似。和Java的Runnable一样,NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main。相当与java 中Runnalbe的Run方法。然后把NSOperation子类的对象放入NSOperationQueue队列中,该队列就会启动并开始处理它。




NSInvocationOperation例子:

和前面一篇博文一样,我们实现一个下载图片的例子。新建一个Single View app,拖放一个ImageView控件到xib界面。

实现代码如下:

#import "ViewController.h"
#define kURL @"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self
                                                                           selector:@selector(downloadImage:)
                                                                             object:kURL];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [queue addOperation:operation];
	// Do any additional setup after loading the view, typically from a nib.
}

-(void)downloadImage:(NSString *)url{
    NSLog(@"url:%@", url);
    NSURL *nsUrl = [NSURL URLWithString:url];
    NSData *data = [[NSData alloc]initWithContentsOfURL:nsUrl];
    UIImage * image = [[UIImage alloc]initWithData:data];
    [self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:YES];
}
-(void)updateUI:(UIImage*) image{
    self.imageView.image = image;
}



1.viewDidLoad方法里可以看到我们用NSInvocationOperation建了一个后台线程,并且放到NSOperationQueue中。后台线程执行downloadImage方法。
2.downloadImage 方法处理下载图片的逻辑。下载完成后用performSelectorOnMainThread执行主线程updateUI方法。
3.updateUI 并把下载的图片显示到图片控件中。

运行可以看到下载图片显示在界面上。
[img]

[/img]



第二种方式继承NSOperation
在.m文件中实现main方法,main方法编写要执行的代码即可。

如何控制线程池中的线程数?
队列里可以加入很多个NSOperation, 可以把NSOperationQueue看作一个线程池,可往线程池中添加操作(NSOperation)到队列中。线程池中的线程可看作消费者,从队列中取走操作,并执行它。

通过下面的代码设置:
[queue setMaxConcurrentOperationCount:5];
线程池中的线程数,也就是并发操作数。默认情况下是-1,-1表示没有限制,这样会同时运行队列中的全部的操作。

  • 大小: 151.4 KB
分享到:
评论

相关推荐

    IOS多线程编程的3种实现方法

    iOS中有以下3种多线程编程方法: NSThread Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue 1.NSThread 这是最轻量级的多线程的方法,使用起来最直观的多线程编程方法。但是因为需要自己管理线程的...

    iOS多线程与网络开发之NSOperation示例代码

    配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加到NSOperationQueue中 ...

    ios多线程开发的常用四种方式和基本使用

    总结来说,iOS多线程开发包括pthread、NSThread、NSOperation&NSOperationQueue以及GCD四种常见方式,每种都有其特点和适用场景。理解并掌握这些技术,能够帮助开发者编写出更加流畅、高效的iOS应用。

    NSOperation_NSOperationQueue_Demo

    NSOperation和NSOperationQueue是Apple在iOS和macOS开发中提供的多线程处理框架,用于高效管理和调度异步任务。这两个类是Foundation框架的一部分,旨在简化并发编程,提高应用程序的性能和响应性。 **NSOperation*...

    iOS-多线程之NSOperation - iOS知识库1

    总之,NSOperation和NSOperationQueue为iOS开发者提供了一种高效、易用的方式来实现多线程编程,它们提供了取消、依赖关系、自定义行为等功能,使得处理复杂任务变得更加简单。在实际开发中,可以根据需求选择合适的...

    IOS多线程编程系类

    1.、NSThread2、CocoaNSOperation(IOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD全称:GrandCentralDispatch(IOS多线程编程之Grand CentralDispatch(GCD)介绍和使用)这三种编程方式从上到下,抽象...

    iOS 多线程NSoperation

    本篇文章将深入探讨iOS多线程中的NSOperation及其相关知识点。 一、NSOperation简介 NSOperation是Objective-C中的一个抽象类,它是操作对象的基类。与直接使用GCD相比,NSOperation提供了更丰富的特性,如依赖管理...

    iOS多线程应用开发中使用NSOperation类的基本方法

    总结来说,NSOperation类在iOS多线程应用开发中扮演了重要角色。通过使用NSOperation和NSOperationQueue,开发者可以更方便地管理并发任务,实现异步执行,同时还能享受到其他高级功能,如依赖关系、取消操作等。...

    iOS开发学习之iOS多线程和RunLoop.pdf

    总的来说,iOS开发中的多线程技术涉及NSThread、POSIX Thread、NSOperation与NSOperationQueue以及GCD等,它们各有优势和使用场景。而RunLoop是管理线程生命周期的关键组件,对于理解iOS应用性能优化至关重要。掌握...

    iOS多线程编程知多少 - 51CTO.COM1

    本文将深入探讨iOS多线程编程的主要知识点。 首先,我们要了解iOS中的多线程模型。主要有三种实现方式:NSOperationQueue、NSThread和GCD(Grand Central Dispatch)。GCD是苹果推出的一种高效、简洁的多线程管理...

    iOS多线程编程之NSThread的使用案例

    2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度...

    ios的三种多线程技术

    #iOS的三种多线程技术 和特性 1.NSThread 2.NSOperation/NSOperationQueue 3.GCD (大中心调度)

    iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD

    ### iOS多线程编程技术详解:NSThread、Cocoa NSOperation、GCD #### 一、多线程基本概念 1. **进程**:在移动设备(如iPhone)上,每一个应用程序都可以被视为一个独立的进程。每个进程都会有一个主线程(main ...

    IOS应用源码之多线程编程.zip

    本资源“IOS应用源码之多线程编程.zip”显然是一个专门探讨iOS多线程编程的代码集合,包含了示例源码和可能的相关教程。 一、多线程简介 在iOS开发中,多线程主要用于实现应用的并发执行,让程序的不同部分可以在...

    iOS多线程编程指南

    ### iOS多线程编程指南 #### 一、引言与多线程概念 随着计算机硬件技术的发展,现代设备越来越依赖于多核处理器来提高性能。为了充分利用这些硬件资源,iOS应用开发者需要掌握多线程编程技术。多线程能够使应用在...

    iOS多线程编程指南(一)关于多线程编程 - 51CTO.COM1

    本文将作为iOS多线程编程指南的第一部分,深入探讨多线程的基本概念、常用技术以及最佳实践。 1. **多线程基础** 多线程是指在一个应用程序中同时执行多个独立的执行流,每个执行流被称为一个线程。在iOS中,多...

    iOS并发编程指南与多线程编程指南合集

    在iOS开发中,多线程和并发编程是关键的技术领域,它们允许应用程序同时处理多个任务,提高用户体验并优化系统资源的使用。以下是对标题“iOS并发编程指南与多线程编程指南合集”以及描述中提及知识点的详细解读: ...

    iOS 多线程总结

    本文将深入探讨四种主要的iOS多线程机制:Pthreads、NSThread、GCD(Grand Central Dispatch)以及NSOperation和NSOperationQueue。 首先,Pthreads是POSIX线程库的一部分,支持跨平台的多线程编程。在iOS中,虽然...

Global site tag (gtag.js) - Google Analytics