以前写过一篇介绍NSInvocationOperation的文章:多线程之NSInvocationOperation,这篇文章是基于此的一个例子。
RootViewController.h
#import <UIKit/UIKit.h>
@interface RootViewController : UITableViewController {
NSMutableArray *array;
}
@property (nonatomic, retain) NSMutableArray *array;
@end
RootViewController.m
#import "RootViewController.h"
@implementation RootViewController
@synthesize array;
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Load"
style:UIBarButtonItemStyleDone
target:self
action:@selector(loadData)];
NSMutableArray *_array = [[NSMutableArray alloc] initWithCapacity:10000];
self.array = _array;
[_array release];
}
- (void) loadData {
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(loadDataWithOperation) object:nil];
[queue addOperation:operation];
[operation release];
}
- (void) loadDataWithOperation {
NSURL *dataURL = [NSURL URLWithString:@"http://icodeblog.com/samples/nsoperation/data.plist"];
NSArray *tmp_array = [NSArray arrayWithContentsOfURL:dataURL];
for(NSString *str in tmp_array) {
[self.array addObject:str];
}
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
#pragma mark Table view methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell.textLabel setText:[self.array objectAtIndex:indexPath.row]];
return cell;
}
- (void)dealloc {
[super dealloc];
[array release];
}
@end
分享到:
相关推荐
1. NSInvocationOperation使用示例: - 创建一个NSInvocationOperation对象,传入目标对象、选择器和参数。 - 调用`start`方法启动操作。当调用`start`时,如果操作未被取消,将会调用指定的目标对象的指定方法...
7. **创建 NSInvocationOperation 和 NSBlockOperation**:NSInvocationOperation使用方法调用来封装操作,而NSBlockOperation则直接使用代码块(block)定义操作。这两种方式都可用于创建简单的异步任务。 8. **...
3. `NSOperationQueuePriorityNormal`: 默认优先级,大多数操作应该使用此优先级。 4. `NSOperationQueuePriorityLow`: 较低的优先级,这类操作可能会被更高优先级的操作抢占。 5. `NSOperationQueuePriorityVeryLow...
4. 创建`NSInvocationOperation`:使用`-initWithInvocation:`初始化`NSInvocationOperation`,传入已准备好的`NSInvocation`。 5. 添加到操作队列:最后,将`NSInvocationOperation`对象添加到`NSOperationQueue`...
在iOS和Mac开发中,Objective-C(简称OC)是一种广泛使用的编程语言,特别是在Apple的Cocoa和Cocoa Touch框架中。`NSInvocationOperation`是OC中的一个类,它继承自`NSOperation`,用于异步执行任务。在某些场景下,...
### NSInvocationOperation的使用 创建一个NSInvocationOperation实例,传入目标对象和选择器,然后调用`start`方法执行操作。例如,如果你有一个名为`run`的方法,可以这样创建和启动操作: ```objc ...
本篇将详细介绍iPhone开发中的多线程,特别是NSThread和NSInvocationOperation的使用。 **一、多线程基础** 在iOS中,多线程主要包括以下几种实现方式: 1. **NSThread**:这是Objective-C中直接对线程进行操作的...
`NSInvocationOperation`和`NSBlockOperation`是`NSOperation`的两个子类,前者用于封装选择器方法,后者用于执行Block。例如,创建一个`NSBlockOperation`: ```objc NSBlockOperation *op2 = [NSBlockOperation ...
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(task7) object:nil]; NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self...
NSInvocationOperationViewController: NSOperation 的子类 NSInvocationOperation 线程的基本使用 NSBlockOperationViewController: NSOperation 的子类 NSBlockOperation 线程的基本使用 ...
`NSInvocationOperation`使用`NSInvocation`对象来表示要执行的操作,而`NSBlockOperation`则可以直接使用闭包(Block)来定义任务。 在实际应用中,选择合适的多线程技术取决于任务的特性和需求。例如,如果你需要...
1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation 2> 自定义子类继承NSOperation,实现内部相应的方法 2.执行操作 NSOperation调用start方法即可开始执行操作,...
通过使用 GCD 的原子操作和消息传递来减少锁的使用,从而提高并发性能。 #### 5.3 改进循环代码 使用 `dispatch_apply` 函数来优化循环代码,使其能够并行执行。 #### 5.4 替换线程Join 使用 `dispatch_group_...
NSInvocationOperation和NSBlockOperation分别用于封装方法调用和代码块。NSOperationQueue可以控制并发数,使用`setMaxConcurrentOperationCount:`限制并发执行的任务数量,`addDependency:`方法可以设置操作间的...
- **子类**:`NSOperation`通常被子类化以实现特定的功能,如`NSInvocationOperation`和`NSBlockOperation`。 **3.2 并发VS非并发Operations** - **并发Operation**:可以在多个线程上并行执行的任务。 - **非并发...
你可以通过继承NSOperation来创建自定义的操作类,或者直接使用Apple提供的子类,如NSInvocationOperation和NSBlockOperation,来快速执行简单的任务。在NSOperation中,你可以添加依赖关系,控制操作的执行顺序,...
开发者通常会创建它的子类,或者使用Apple提供的两个内置子类:NSInvocationOperation和NSBlockOperation。NSInvocationOperation用于包装任何方法调用,而NSBlockOperation则支持直接执行代码块(block)。 在描述...
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil]; [op start]; } - (void)run { NSLog(@"------%@", [NSThread currentThread]); } - ...
与直接使用GCD相比,NSOperation提供了更丰富的特性,如依赖管理、取消操作、操作队列以及更好的代码可读性。通过子类化或使用Block创建NSOperation实例,开发者可以方便地定义自定义任务。 二、NSOperationQueue ...