当初学习多线程这一块的时候,时间比较匆忙,没有细细考虑,而今重新学一次,算是复习和总结吧。

 #import "ViewController.h"

 @interface ViewController ()

 @end

 @implementation ViewController

 /*
通过调用[self invocationOperation]的log,可以发现,在不加入queue的情况下,默认是在主线程中同步执行操作的 而通过调用[self blockOperation]的log,可以发现,在不加入queue的情况下,同一个block里的任务是,默认是在主线程中同步执行操作的。但是,如果有多个block操作,会是并发、异步执行的 NSBlockOperation 可以设置监听,调用[self opeationListen] 在完成任务后,可以设置完成这个任务想要执行的操作 调用[self operationQueue]的log,可以发现,在不设置依赖的情况下,任务是并发、异步执行的 而设置依赖的情况下,设置了依赖的任务按照所设定的顺序调用,而没有设置的,则是并发、异步执行
*/
- (void)viewDidLoad {
[super viewDidLoad]; [self opeationListen];
} - (void)invocationOperation
{
NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downLoadImage) object:nil];
[invocation start];
} - (void)blockOperation
{
NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init]; [blockOperation addExecutionBlock:^{
for (int i = ; i<; i++) {
NSLog(@"blockOperation------下载图片1---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
}]; [blockOperation addExecutionBlock:^{
NSLog(@"blockOperation__2 --- %@",[NSThread currentThread]);
}]; [blockOperation addExecutionBlock:^{
NSLog(@"blockOperation__3 --- %@",[NSThread currentThread]);
}]; [blockOperation start];
} - (void)opeationListen
{
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
for (int i = ; i<; i++) {
NSLog(@"opeationListen------下载图片---%@", [NSThread currentThread]);
}
}]; blockOperation.completionBlock = ^{
// ...下载完图片后想做事情
NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]);
}; [blockOperation start];
} - (void)downLoadImage
{
for (int i = ; i < ; i++) {
NSLog(@"downLoadImage----正在下载----image---%@",[NSThread currentThread]);
[NSThread sleepForTimeInterval:0.2];
}
} - (void)run
{
for (int i = ; i<; i++) {
NSLog(@"run---正在跑步-----%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.2];
}
}
- (void)operationQueue
{
NSInvocationOperation *invocationOperation_1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downLoadImage) object:nil]; NSInvocationOperation *invocationOperation_2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil]; NSBlockOperation *blockOperation_1 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = ; i < ; i++) {
NSLog(@"blockOperation_1------下载图片---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
}]; NSBlockOperation *blockOperation_2 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = ; i < ; i++) {
NSLog(@"blockOperation_2------下载视频---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
}]; //设置依赖
[blockOperation_2 addDependency:blockOperation_1]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; //设置最大并发数(一般设置为2~~3个)
queue.maxConcurrentOperationCount = ; [queue addOperations:@[invocationOperation_1, invocationOperation_2, blockOperation_1, blockOperation_2] waitUntilFinished:NO];
}
@end

NSOperation和NSOperationQueue的一些基本操作的更多相关文章

  1. GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...

  2. 多线程之NSOperation和NSOperationQueue

    这篇文章里我将不过多的谈及理论知识,这些东西会的自然会,不会的,看多了也是云里雾里.下面我讲更多的用代码+注释的方式来讲如何使用NSOperation和NSOperationQueue. 1.NSOp ...

  3. 用NSOperation和NSOperationQueue实现多线程编程

    1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步.加锁问题,造成一些性能上的开销.我们也可以配合使用NSOperation和NS ...

  4. OC - 14.NSOperation与NSOperationQueue

    简介 通过NSOperation与NSOperationQueue的组合也能实现多线程 通常将任务封装成NSOperation对象,并将对象添加到NSOperationQueue中实现 NSOpera ...

  5. 多线程下的NSOperation和NSOperationQueue的使用

    多线程下的NSOperation和NSOperationQueue的使用 NSOperation和NSOperationQueue的介绍: NSOperation是Cocoa中的一个抽象类,用来封装单 ...

  6. Swift - 多线程实现方式(2) - NSOperation和NSOperationQueue

    1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术: (1)NSThread (2)Cocoa NSOperation(NSOperation和NSOperationQueu ...

  7. iOS 多线程 NSOperation、NSOperationQueue

    1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...

  8. NSOperation、NSOperationQueue(III)

    NSOperation.NSOperationQueue 常用属性和方法归纳 NSOperation 常用属性和方法 a. 取消操作方法 //可取消操作,实质是标记 isCancelled 状态. - ...

  9. NSOperation、NSOperationQueue(II)

    NSOperationQueue 控制串行执行.并发执行 NSOperationQueue 创建的自定义队列同时具有串行.并发功能 这里有个关键属性 maxConcurrentOperationCou ...

随机推荐

  1. Linux主要shell命令详解(上)

    [摘自网络] kill -9 -1即实现用kill命令退出系统 Linux主要shell命令详解 [上篇] shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的 ...

  2. iOS UTI

    UTI全拼Uniform Type Identifier,直接翻译过来就是统一类型标示符. 这个东西可以实现的功能就是设备之间或者app之间的文件传输. 有兴趣的领个支付宝红包再走, ^_^ 全套相关 ...

  3. Segment Advisor

    Segment Advisor通过分析和检查AWR中关于segments的使用和增长统计信息,以及采样分析segment中的数据,找出哪些segments有可以回收的空间. Segment Advis ...

  4. MySQL-慢查询日志

    慢查询日志功能默认不开启,其记录了执行时间超过参数long_query_time的值(默认是10),且访问的行数超过了参数min_examined_row_limit的值得SQL语句. mysql&g ...

  5. openkm安装过程

    # java -jar /software/OKMInstaller.jar Running in Linux: 0.9.1-CE (build: 445bef5) Linux distro: rhe ...

  6. ios开发中用过的一些外部库总结 cocoapods list

    下面几个库是在之前的一个ios app开发中使用过的一些外部库: 1. zbar :2. shakebox :3. processbar :4. tableviewcontroller :新版的sta ...

  7. df -h和du -sh显示结果不一样的原因及解决

    一.背景:一台2T硬盘的mysql服务器,保存电话的CDR信息.按照历史数据的水平,一个月能生成20+GB的文件.然而短短的半年时间,满了?! 登录服务器看谁占了这么大的空间?好吧,slow-quer ...

  8. (面试题)有关Integer

    今天在一家公司做了个面试题:运行下列代码,输出结果是什么 Integer a=new Integer("12");  Integer b=new Integer("12& ...

  9. windows系统如何通过Xshell 客户端连接 linux系统(主要介绍ubuntu系统)

    一. 1.查看ubuntu系统的ip地址:ifconfig 在window系统运行窗口下:ping ubuntu系统的IP地址:例如:ping 192.168.163.129 出现下述命令就是ping ...

  10. 本地启动spark-shell

    由于spark-1.3作为一个里程碑式的发布, 加入众多的功能特性,所以,有必要好好的研究一把,spark-1.3需要scala-2.10.x的版本支持,而系统上默认的scala的版本为2.9,需要进 ...