多线程:NSOperation 的基本使用
2016-03-31 18:30
375 查看
#import "ViewController.h"
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self opDemo6];
}
// 子线程下载完,回到主线程
- (void)opDemo6 {
[[[NSOperationQueue
alloc]init]addOperationWithBlock:^{
NSLog(@"下载文件A %@",[NSThread
currentThread]);
// 回到主线程
[[NSOperationQueue
mainQueue]addOperationWithBlock:^{
NSLog(@"回到主线程刷新的UI%@",[NSThread
currentThread]);
}];
}];
}
- (void)opDemo5 {
// 如果我们不需要操作队列,返回值对我们没用的时候,就可以使用此方法来添加操作到队列
[[[NSOperationQueue
alloc]init]addOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
}
- (void)opDemo4 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
//
添加操作到队列
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
}
- (void)opDemo3 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
for (int i =
0; i < 200; ++i) {
// 创建操作
NSBlockOperation *op = [NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"%@--%d",[NSThread
currentThread],i);
}];
//
把操作添加到队列
[queue addOperation:op];
}
}
// 效果跟GCD的全局队列一样
- (void)opDemo2 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
for (int i =
0; i < 200; ++i) {
// 创建操作
NSInvocationOperation *op = [[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(demo:)
object:@(i)];
//
把操作添加到队列
[queue addOperation:op];
}
}
// NSBlockOperation
- (void)opDemo1 {
//
创建操作
NSBlockOperation *block = [NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
// 把操作添加到队列
[queue addOperation:block];
}
// NSInvocationOperation
- (voi
a925
d)opDemo {
//
创建一个操作
NSInvocationOperation *op = [[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(demo:)
object:@"hello"];
// 开始 --
没有开启线程,在当前线程执行此操作
// [op start];
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
// 把操作添加到队列 --
添加到队列之后,会开启线程(异步执行)
[queue addOperation:op];
NSLog(@"end");
}
- (void)demo:(id)value {
NSLog(@"%@ - %@",[NSThread
currentThread],value);
}
@end
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self opDemo6];
}
// 子线程下载完,回到主线程
- (void)opDemo6 {
[[[NSOperationQueue
alloc]init]addOperationWithBlock:^{
NSLog(@"下载文件A %@",[NSThread
currentThread]);
// 回到主线程
[[NSOperationQueue
mainQueue]addOperationWithBlock:^{
NSLog(@"回到主线程刷新的UI%@",[NSThread
currentThread]);
}];
}];
}
- (void)opDemo5 {
// 如果我们不需要操作队列,返回值对我们没用的时候,就可以使用此方法来添加操作到队列
[[[NSOperationQueue
alloc]init]addOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
}
- (void)opDemo4 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
//
添加操作到队列
[queue addOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
}
- (void)opDemo3 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
for (int i =
0; i < 200; ++i) {
// 创建操作
NSBlockOperation *op = [NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"%@--%d",[NSThread
currentThread],i);
}];
//
把操作添加到队列
[queue addOperation:op];
}
}
// 效果跟GCD的全局队列一样
- (void)opDemo2 {
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
for (int i =
0; i < 200; ++i) {
// 创建操作
NSInvocationOperation *op = [[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(demo:)
object:@(i)];
//
把操作添加到队列
[queue addOperation:op];
}
}
// NSBlockOperation
- (void)opDemo1 {
//
创建操作
NSBlockOperation *block = [NSBlockOperation
blockOperationWithBlock:^{
NSLog(@"%@",[NSThread
currentThread]);
}];
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
// 把操作添加到队列
[queue addOperation:block];
}
// NSInvocationOperation
- (voi
a925
d)opDemo {
//
创建一个操作
NSInvocationOperation *op = [[NSInvocationOperation
alloc]initWithTarget:self
selector:@selector(demo:)
object:@"hello"];
// 开始 --
没有开启线程,在当前线程执行此操作
// [op start];
//
创建队列
NSOperationQueue *queue = [[NSOperationQueue
alloc]init];
// 把操作添加到队列 --
添加到队列之后,会开启线程(异步执行)
[queue addOperation:op];
NSLog(@"end");
}
- (void)demo:(id)value {
NSLog(@"%@ - %@",[NSThread
currentThread],value);
}
@end
相关文章推荐
- Web网站的几个并发量级
- linux c语言 select函数用法
- Nginx负载均衡配置
- 图像微分的程序实现:df/dx
- Linux下ps命令详解
- tomcat误报
- Nginx反向代理配置文件
- ORMLite的几个关键注解的使用说明
- ZooKeeper场景实践:(6)集群监控和Master选举
- Linux系统之路由配置
- 有关bash的一些常识
- Apache Cordova-Android框架原理研究笔记 I
- tomcat三种启动指定项目的方式
- linux下g++ 编译时动态库和静态库的链接和头文件问题
- Apache多端口配置
- 安装apache2.2
- linux下安装php环境
- 练习,判断并创建不存在的文件或目录
- 企业级容器Registry开源项目Harbor架构简介
- linux用户进程分析