在网络应用程序中,经常需要多任务连接来提高程序的性能。比如多任务下载,多任务HTTP请求等,即线程控制模型中的工作群模型。使用 NSOperation 可以很容易实现这个功能。下面就以使用NSOperation处理并行的HTTP请求为例子,说明其用法。
首先准备一个 NSOperation 的子类,用于处理 HTTP 请求。
1
2
3
4
5
6
7
8
|
@interface RequestOperation : NSOperation {
NSURLRequest* _request;
NSMutableData* _data;
}
- (id)initWithRequest:(NSURLRequest *)request;
@end
|
下面是实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
@implementation RequestOperation
- (id)initWithRequest:(NSURLRequest *)request {
if (self = [self init]) {
_request = [request retain];
_data = [[NSMutableData data] retain];
}
return self;
}
- (void)dealloc {
[_request release];
[_data release];
[super dealloc];
}
- (BOOL)isConcurrent {
return YES;
}
- (void)start {
if (![self isCancelled]) {
[NSURLConnection connectionWithRequest:_request delegate:self];
}
}
- (void)connection:(NSURLConnection*)connection
didReceiveData:(NSData*)data {
[_data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection {
}
@end
|
如果没有重载 isConcurrent 函数,缺省是返回NO,就是说只能以同步的方式处理。而如果又使用了connectionWithRequest:delegate: 以异步方式处理事件后,会产生下面的错误信息:
1
|
_NSAutoreleaseNoPool(): Object 0x18a140 of class NSURLConnection autoreleased with no pool in place - just leaking
|
然后在你的 Controller 类中用 NSOperationQueue 来处理各个任务。
1
2
3
4
5
|
@interface xxViewController : UIViewController {
NSOperationQueue* _queue;
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@implementation xxViewController
- (IBAction)buttonClicked:(id) sender {
_queue = [[NSOperationQueue alloc] init];
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
RequestOperation* operation = [[RequestOperation alloc] initWithRequest:request];
[operation autorelease];
NSURLRequest* request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.yahoo.co.jp"]];
RequestOperation* operation2 = [[RequestOperation alloc] initWithRequest:request2];
[operation2 autorelease];
[_queue addOperation:operation];
}
@end
|
以上,用 NSOperation 来并行处理不同的任务,使用 NSOperationQueue 来控制复数的 NSOperation,并且可以限制Queue的大小,而不是无限制的使用任务。当一个任务完成,就执行待机中的任务。
分享到:
相关推荐
这篇教程主要关注的是NSOperation在网络编程中的应用以及基础的网络概念。NSOperation是Apple提供的一种高级任务调度机制,它为并发编程提供了强大而灵活的支持,尤其适合处理网络请求。下面我们将深入探讨这两个...
本篇将详细介绍如何在iOS应用开发中使用NSOperation类进行多线程编程。 一、NSOperation简介 NSOperation是一个抽象类,其主要作用是为多线程编程提供了一种更加灵活的解决方案。与直接使用GCD(Grand Central ...
本篇文章将深入探讨iOS多线程中的NSOperation及其相关知识点。 一、NSOperation简介 NSOperation是Objective-C中的一个抽象类,它是操作对象的基类。与直接使用GCD相比,NSOperation提供了更丰富的特性,如依赖管理...
配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加到NSOperationQueue中 ...
本篇文章主要探讨了iOS中的NSOperation及其队列,它是Apple提供的一个强大的多线程解决方案。 首先,多线程是指在一个应用程序中同时运行多个线程或任务,这使得程序可以在等待某个操作完成的同时执行其他任务。iOS...
NSOperation 是苹果在 iOS 和 macOS 开发中提供的一种高级任务调度和并发控制机制,它源自于 GCD(Grand Central Dispatch)但提供了更多的灵活性和可控性。在这个“NSOperation-Network-Demo”项目中,我们将深入...
NSOperation是苹果iOS和macOS开发中的一个关键概念,它属于Foundation框架,是Apple为解决多线程和并发问题提供的一种高级抽象。在iOS和macOS应用开发中,特别是处理像UITableView这样的视图组件时,高效地加载和...
### Objective-C并发编程:深入解析NSOperation与NSOperationQueue #### 一、Objective-C简介及其特点 ...掌握 `NSOperation` 和 `NSOperationQueue` 的使用技巧,对于任何 Objective-C 开发者来说都是非常有价值的。
NSOperation是苹果iOS和macOS开发中的一个关键概念,它属于Foundation框架,是Apple为解决多线程...NSOperation和NSOperationQueue的使用是iOS和macOS开发中的最佳实践之一,它们使得多线程编程变得更加简单和可控。
在iOS开发中,异步加载图片是一项常见的任务,特别是在处理大量数据或者网络请求时,为了提升用户体验,我们通常会将这种耗时的操作放在后台线程进行。...理解并掌握`NSOperation`的使用,是iOS开发中的重要技能之一。
- 使用`NSOperation`或`DispatchQueue`来并发执行循环中的任务。 **5.4 替换线程Join** - **问题**:线程Join会导致主线程阻塞。 - **解决方案**:使用`dispatch_group_wait`来等待一组任务完成。 **5.5 修改...
NSOperation是Objective-C中用于实现多线程编程的一个高级接口,它是苹果的Foundation框架的一部分,提供了比直接使用NSThread更灵活的并发控制机制。NSOperation不仅封装了具体的操作任务,还支持操作的依赖关系、...
NSOperation和NSOperationQueue是iOS和Mac OS X开发中用于实现多任务并行处理的关键框架,它们是苹果提供的高级并发工具,旨在简化复杂的线程管理和任务调度。在本Demo中,我们将深入探讨同步和异步操作的区别以及...
《iPhone开发指南》是iOS应用开发者的入门宝典,它涵盖了从基础到进阶的各种知识点。这份资料包含的精彩章节包括第八...通过阅读这些精选章节,你将能够逐步揭开iPhone应用程序开发的神秘面纱,踏上精彩的iOS开发之旅。
使用多线程可以显著提高程序的响应速度和效率,尤其是在处理耗时任务时,避免了UI卡顿的情况发生。例如,网络请求、数据库查询等耗时操作可以通过多线程在后台进行,从而保持UI线程的流畅性。 #### 二、多线程实现...
NSInvocationOperationViewController: NSOperation 的子类 NSInvocationOperation 线程的基本使用 NSBlockOperationViewController: NSOperation 的子类 NSBlockOperation 线程的基本使用 ...
在iOS开发中,多线程技术是不可或缺的一部分,特别是在处理耗时操作如加载图片时,为了保持用户界面的流畅,我们需要将这些任务放在后台线程执行。本教程将重点讲解三种多线程技术:NSThread、NSOperation和GCD...
10. **多线程编程**:理解GCD(Grand Central Dispatch)、NSOperation和NSOperationQueue,以实现异步任务和后台处理。 11. **推送通知**:学习如何集成Apple Push Notification Service (APNs),向用户发送实时...