iOS 多线程的使用(Operation)
2015-10-02 16:04
417 查看
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
不能直接Operation是因为它里面没有直接操作的方法
只是一个基类 (抽象类)
NSInvocationOperation *invocation0 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation0"];
如果单独使用Operation
必须手动启动
[invocation start];
Operation是在当前线程去执行(同步执行)
NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation1"];
NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation2"];
NSInvocationOperation *invocation3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation3"];
NSInvocationOperation *invocation4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation4"];
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
具体执行的方法
任务
[self act:@"blockOperation"];
}];
添加操作
NSBlockOperation
的操作数大于1
的时候 会开辟线程去执行
[blockOperation addExecutionBlock:^{
[self act:@"blockOperation2"];
}];
[blockOperation start];
operation
默认在当期线程去执行
(同步执行)
可以使用线程队列NSOperationQueue去管理线程 (默认会开辟线程去执行)
异步执行 不用手动去启动线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
可以线程队列的最大并发数(最多允许多少操作同时执行)
queue.maxConcurrentOperationCount = 3;
设置Operation的依赖关系
[invocation1 addDependency:invocation0];
[invocation2 addDependency:invocation1];
[invocation3 addDependency:invocation2];
[invocation4 addDependency:invocation3];
[blockOperation addDependency:invocation4];
[queue addOperation:invocation0];
[queue addOperation:invocation1];
[queue addOperation:invocation2];
[queue addOperation:invocation3];
[queue addOperation:invocation4];
[queue addOperation:blockOperation];
}
- (void)act:(id)sender
{
NSLog(@"%@%@",[NSThread currentThread],sender);
}
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
不能直接Operation是因为它里面没有直接操作的方法
只是一个基类 (抽象类)
NSInvocationOperation *invocation0 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation0"];
如果单独使用Operation
必须手动启动
[invocation start];
Operation是在当前线程去执行(同步执行)
NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation1"];
NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation2"];
NSInvocationOperation *invocation3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation3"];
NSInvocationOperation *invocation4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation4"];
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
具体执行的方法
任务
[self act:@"blockOperation"];
}];
添加操作
NSBlockOperation
的操作数大于1
的时候 会开辟线程去执行
[blockOperation addExecutionBlock:^{
[self act:@"blockOperation2"];
}];
[blockOperation start];
operation
默认在当期线程去执行
(同步执行)
可以使用线程队列NSOperationQueue去管理线程 (默认会开辟线程去执行)
异步执行 不用手动去启动线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
可以线程队列的最大并发数(最多允许多少操作同时执行)
queue.maxConcurrentOperationCount = 3;
设置Operation的依赖关系
[invocation1 addDependency:invocation0];
[invocation2 addDependency:invocation1];
[invocation3 addDependency:invocation2];
[invocation4 addDependency:invocation3];
[blockOperation addDependency:invocation4];
[queue addOperation:invocation0];
[queue addOperation:invocation1];
[queue addOperation:invocation2];
[queue addOperation:invocation3];
[queue addOperation:invocation4];
[queue addOperation:blockOperation];
}
- (void)act:(id)sender
{
NSLog(@"%@%@",[NSThread currentThread],sender);
}
@end
相关文章推荐
- iOS 多线程实例(自定义NSOperation并传值(block,notification))
- iOS 多线程实例(NSThread售票窗口的模拟)
- iOS开发TTS技术即文本转语音
- iOS多线程使用实例(异步下载图片的时候不会阻塞主线程的执行)
- iOS导航栏的颜色和电池颜色的修改
- IOS—静态方法(类方法)和实例方法
- IOS实时预览自定义控件效果
- iOS编程规范
- iOS动力效果
- IOS使用自带的API绘制一个加载进度的圆圈
- IOS对象关系映射(ORM)之coreData框架的学习——(三)对使用步骤进行方法封装
- iOS pragma mark要使用
- Xcode 5 + iOS 7免证书(iDP)真机调试与生成IPA全攻略
- XCode6.0 的iOS免证书真机测试方法
- [IOS]Xcode7免开发者帐号真机调试运行程序
- 升级iOS9和Xcode7后应用崩溃解决方案
- iOS 集成支付宝支付
- IOS开发-代码规范
- iOS 编辑代码规范
- iOS中的代码规范