iosNSOperation依赖关系

NSOperation 依赖关系,就像你和女友,互相需要对方一样。非常有意思。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

//操作依赖

//处理图片的耗时操作在子线程中执行

NSBlockOperation *blockOp = [NSBlockOperation
blockOperationWithBlock:^{

NSLog(@"blockOp
下载图片 thread = %@",[NSThread
currentThread]);

}];

NSBlockOperation *blockOp1 = [NSBlockOperation
blockOperationWithBlock:^{

NSLog(@"blockOp1
给图片添加水印 thread = %@",[NSThread
currentThread]);

}];

NSBlockOperation *blockOp2 = [NSBlockOperation
blockOperationWithBlock:^{

[NSThread
sleepForTimeInterval:2.0];

NSLog(@"blockOp2
保存图片 thread = %@",[NSThread
currentThread]);

}];

//给blockOp1添加依赖关系,使blockOp1在blcokOp执行结束后执行

[blockOp1 addDependency:blockOp];//也就是下载结束之后再给图片添加水印,然后保存图片。一种依赖关系

[blockOp2 addDependency:blockOp1];

//创建队列(把上面要干的事情丢到队列中同时执行--有点类似GCD中的异步,并发,开启了多个线程)

NSOperationQueue *queue = [[NSOperationQueue
alloc]init];

//添加到队列

[queue addOperation:blockOp];

[queue addOperation:blockOp1];

[queue addOperation:blockOp2];

//设置队列中操作同时执行的最大数目,也就是说当前队列中呢最多由几个线程在同时执行,一般情况下允许最大的并发数2或者3

[queue setMaxConcurrentOperationCount:3];

//

for (int i =
0; i<50; i++) {

NSBlockOperation *blockOpp = [NSBlockOperation
blockOperationWithBlock:^{

NSLog(@"blockOpp i = %d thread = %@",i,[NSThread
currentThread]);

}];

[queue addOperation:blockOpp];

}

//刷新UI的操作依赖关系必须在主线程中执行

NSBlockOperation *blocOpMain = [NSBlockOperation
blockOperationWithBlock:^{

NSLog(@"blockOpMain
刷新UI 显示图片,thread = %@",[NSThread
currentThread]);

}];

//这两个操作的依赖关系,跨队列

[blocOpMain addDependency:blockOp2];

//主队列

[[NSOperationQueue
mainQueue]addOperation:blocOpMain];

}

@end

时间: 2024-10-17 13:04:31

iosNSOperation依赖关系的相关文章

Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图

Maven 组件界面介绍 如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有: 第一个按钮:Reimport All Maven Projects 表示根据 pom.xml 重新载入项目.一般单我们在 pom.xml 添加了依赖包或是插件的时候,发现标注 4 的依赖区中没有看到最新写的依赖的话,可以尝试点击此按钮进行项目的重新载入. 第六个按钮:Execute Maven Goal 弹出可执行的 Maven 命令的输入框.有些情况下我们需要通过书写某些执行命令来构建项目,就可以通

Makefile 8——使用依赖关系文件

Makefile中存在一个include指令,它的作用如同C语言中的#include预处理指令.在Makefile中,可以通过include指令将自动生成的依赖关系文件包含进来,从而使得依赖关系文件中的内容成为Makefile的一部分. 在此之前,先介绍一下Makefile中的include的用法. 1 .PHONY:all clean 2 DIR_DEP=dep 3 DEPS=test_deps 4 all: exe 5 6 include $(DEPS) 7 8 dep: 9 mkdir d

Makefile 7——自动生成依赖关系 三颗星

后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上"objs/"前缀.gcc的-E选项,预处理.在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了.通过-E选项,可以避免生成依赖关系时gcc发出警告,以及提高依赖关系的生成效率. 现在,已经找到自动生成依赖关系的方法了,那么如何将其整合到我们complicated项目的Makefile中呢?自动生成

创建对象与对象依赖关系

创建对象 SpringIOC容器,是spring核心内容.作用: 创建对象 & 处理对象的依赖关系 IOC容器创建对象: 创建对象, 有几种方式: 1) 调用无参数构造器 在bean类中写入无参构造函数 public User() { // TODO Auto-generated constructor stub } xml配置文件 <!-- 1.默认无参的构造器 --> <bean id="user1" class="com.gqx.create.

深入解析Linux内核及其相关架构的依赖关系

Linux kernel 成功的两个原因: 灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中:每个子系统(尤其是那些需要改进的)都具备良好的可扩展性.正是这两个原因使得Linux kernel可以不断进化和改进. 一.Linux内核在整个计算机系统中的位置 分层结构的原则: the dependencies between subsystems are from the top down: layers pictured near the top depend on lower la

maven 父子关系模块配置(三)--依赖关系配置

为了方便依赖关系的管理,可在父模块中配置好所需的依赖关系,在子模块中引入group_id 和 artifactId 即可. 父模块pom文件配置: <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</versio

依赖关系助力XMind 6中的甘特图

在XMind 6思维导图中,用户可以利用甘特图功能来进行项目管理,在项目实施过程中,您可能会经常需要为某两个任务之间建立一种依赖关系.现在,我们可以很方便地在XMind 6甘特图里面轻松做到这点. 在XMind 6甘特图中建立依赖关系步骤: 步骤一 选择某一任务主题. 步骤二 进入任务信息视图,从菜单选择[视图],点击"任务信息"选项. 步骤三 滚动到视图的底部,在任务关联对象一栏点击加号添加. 步骤四 在对话框中选择关联的任务主题. 步骤五 确定依赖关系的类型. ?截止日期-至-开始

makefile 自动处理头文件的依赖关系 (zz)

现在我们的Makefile写成这样: all: main main: main.o stack.o maze.ogcc $^ -o [email protected] main.o: main.h stack.h maze.hstack.o: stack.h main.hmaze.o: maze.h main.h clean:-rm main *.o .PHONY: clean按照惯例,用all做缺省目标.现在还有一点比较麻烦,在写main.o.stack.o和maze.o这三个目标的规则时要查

Android 5.0 进程A和APK B依赖关系问题的研究

(本文来自于和博客上一个朋友的聊天,但可惜我回复后一直没收到这位朋友的回答.故在此把这个问题和大家介绍下,希望能抛砖引玉) 这位朋友的问题是这样的: 应用程序A运行时跑在进程A中,它可以在运行时通过ClassLoader加载另外一个应用程序B. 当然,应用程序B也是可以运行的,它运行在进程B中. 在Android 5.0以前,进程B和进程A是没有关系.但是5.0以后,如果进程B被stop的话,进程A一样会被干掉. 这就是Android 5.0带来的进程A/B依赖关系. 这个问题有几个关键技术点: