NSOperation高级操作

#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 *)touches withEvent:(UIEvent *)event

{

// 1.创建操作

NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test:) object:@"lalala"];

// 创建操作

NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{

//

NSLog(@"++++++++++++++++%@",[NSThread currentThread]);

}];

// 创建操作

NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{

[self test1];

}];

// 当某个操作完成之后,就会回调这个方法.

[op3 setCompletionBlock:^{

// 对于Block,尽量用 set 方法,这样就不用去猜测 Block 的类型了.

NSLog(@"操作完成之后的回调");

}];

// 2.将操作添加到操作队列中.

// 1>创建非主队列

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

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

// 操作的执行顺序和往队列中添加操作的顺序没有关系.

// NSOperation 提供了操作按顺序执行的方法:添加操作依赖.

// 注意:1.添加操作依赖,要避免相互依赖.

//     2. 将添加操作依赖往前放.

// 对于不同操作队列中的操作,添加操作依赖依然有效.

// 操作1 op1依赖于 op2 :  op2 > op1

[op1 addDependency:op2];

[op2 addDependency:op3]; // op3 > 0p2

// 只要将操作添加到操作队列中,操作队列就会执行并且管理其中的操作.

[queue addOperation:op1];

[queue addOperation:op2];

[queue1 addOperation:op3];

}

- (void)test1

{

NSLog(@"======================%@",[NSThread currentThread]);

}

- (void)test:(NSString *)str

{

NSLog(@"-----------------%@%@",str,[NSThread currentThread]);

}

@end

时间: 2024-10-13 22:51:35

NSOperation高级操作的相关文章

线程高级操作(二)

之前在线程高级操作中说到了线程的高级操作包括修改线程的属性和进行线程之间的同步操作.线程的同步有两种方式,一种是使用互斥量一种是使用读写锁.上一篇文章说的是互斥量,这篇文章主要介绍的是读写锁. 读写锁与互斥量类似,但是读写锁相对于互斥量来说最大的特点就是并行性高.互斥锁每次只有一个线程可以得到锁进行操作,其他的线程处于阻塞状态.多线程的意义就在于高并发性,但是使用互斥量就会将并行操作编程串行操作,程序的效率会大打折扣. 读写锁的优点是读写锁分为两种,读线程和写线程.读线程只对共享资源进行读操作,

数据库的高级操作

高级操作 复制表结构 语法: ????create table 表B like 表A; 示例: 复制表中的数据 语法: ????create table 表B select *或字段列表 from 表A; 蠕虫复制 语法: ????insert into 表名[(字段列表)] select *或字段列表 from 表名; 修改操作 ????限制修改指定的行数. 语法: ????update 表名 set 字段=值... [where子句] limit n; 说明: ????在执行update语句

Eclipse高级操作 远程调试

Eclipse高级操作 远程调试 JPDA是SUN JDK自带的远程调试机制.它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节.只要你装了JDK1.2以上的SUN JDK,就已经有了JPDA支持.只要是用标准SUN JDK中java.exe运行的应用,就可以用JPDA进行远程调试.以WEB应用的开发为例,servlet和ejb的调试一直不是一件太容易的事情.虽然Jbuilder/Eclipse等有一些常见的应用服务器,如tomcat/weblogic的调试插

Git高级操作

本文是在Git操作指南基础上衍生出来的高级操作,如果你对git不是很熟悉,建议你先阅读Git操作指南. 一.忽略提交特定文件 如果你不想让一些文件上传到git仓库中,可以让Git忽略特定文件或是目录,通过vi ~/.gitconfig编辑git的配置文件,可以使用感叹号(注意英文)来指出例外的情况. 1 !*.a //所有文件后缀为a的都不提交 2 !/demo/ //文件demo下的所有文件都不提交 二.查看仓库历史记录 git log 用来查看仓库历史记录,有三个参数: oneline——把

【转载】8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

sql高级操作

同样也是用于记录以便日后联系用!里面基本包含了一般sql的高级用法! drop table if exists stu; create table stu( name varchar(30), age int, stuid int not null PRIMARY key AUTO_INCREMENT, idnum int, sex varchar(30), check(sex in ('男','女')) )charset=utf8; insert into stu (name,age,idnu

selenium学习笔记——高级操作

这篇主要介绍一下页面的高级操作:页面跳转.单选下拉框选择.frame切换.鼠标悬停.非网页弹窗 一.页面跳转/窗口跳转 两种方式:不关闭原窗口和关闭原窗口,建议采用第二种关闭原窗口这种方式   不关闭原窗口: 1 //获取当前窗口的句柄 2 String orighandle = driver.getWindowHandle(); 3 //遍历所有句柄 4 for(String handle : driver.getWindowHandles()){ 5 // 如果不是原窗口的句柄,那么就把句柄

Unix_文件系统高级操作_0

这是<UNIX初级教程>_第8章 UNIX文件系统高级操作的内容 感觉这一章的内容还是挺多的:(注:其间的下划线“_”是把命令与其它文字隔开,它不是命令的一部分) 1 读文件:只读版本view命令.读文件pg命令(MaoBook Os的命令中没有它,略过) 2 shell重定向:输出重定向,输入重定向 3 增强的文件打印功能_略过 4 文件操作命令:复制文件_cp命令.移动文件_mv命令.链接文件_ln命令.计算数字_wc命令. 5 文件名替换:?元字符|*元字符|[ ]元字符.元字符与隐藏文

黑马程序员(Java)----API之常用类(数组的高级操作、正则表达式)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 4.7 Array的高级操作 4.7.1 排序 1.冒泡排序 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处. import java.awt.image.BufferStrategy; public class ArrayDemo2 { public static void main(String[] args) { // 定义一个数组 int[] arr = { 24,