操作和操作队列(NSOperation)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// NSOperation 的使用选择:

// 一般在开发中,直接使用 GCD 开启线程.做多线程的操作.

// 如果 自己需要自定义框架/需要管理操作,这个时候,选择NSOperation.

// 管理操作: 取消操作/暂停/恢复操作 ---- NSOperationQueue 可以管理.高级操作.

// GCD 可以让任务按顺序执行

// NSOperation 可以让操作按顺序执行吗? ---> 高级操作.

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

// NSOperation 两个子类

//    // 创建一个操作.

//    NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];

//

//    // 在当前线程执行. start 会在当前线程执行.直接启动

//    [op start];

// 创建一个操作.

// 如果 NSBlockOperation 中封装的操作数 > 1(追加操作了),这个时候,不能保证任务在哪条线程中执行.即使将操作添加到主队列,依然会有任务在子线程执行.

// 建议:如果使用 NSBlockOperation,为了确保任务在自己想要的线程执行,最好不要追加操作.

NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{

//

[self test];

}];

// 追加操作/任务

[op addExecutionBlock:^{

//

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

}];

// 追加操作/任务

[op addExecutionBlock:^{

//

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

}];

// 追加操作/任务

[op addExecutionBlock:^{

//

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

}];

// 追加操作/任务

[op addExecutionBlock:^{

//

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

}];

// 直接启动操作

// [op start];

// NSOperation中的队列 -----> 操作队列 :管理/执行操作. 两种:

// 1.主队列:主队列中的操作,都要交给主线程执行.

//

// 获取主队列

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];

// 将操作添加到队列中

[mainQueue addOperation:op];

// 2.非主队列.添加到非主队列中的操作,都交给子线程来执行.

//    // 创建一个非主队列

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

//

//    // 将操作添加到非主队列中

//    [queue addOperation:op];

// 这一句代码,相当于之前的两句.

[mainQueue addOperationWithBlock:^{

//

NSLog(@"直接往操作队列中添加操作%@",[NSThread currentThread]);

}];

}

-(void)test

{

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

}

@end

时间: 2024-10-12 20:38:19

操作和操作队列(NSOperation)的相关文章

ios多线程操作(十一)—— NSOperation的高级操作

NSOperation可以调用start方法来执行任务,但默认是同步执行的,如果将NSOperation添加到      NSOperationQueue(操作队列)中,系统会自动异步执行队列中的操作. NSOperationQueue中可以对操作进行取消,暂停和恢复 取消函数为: [objc] view plain copy - (void)cancelAllOperations; 也可以调用NSOperation的cancel方法来取消单个操作 [objc] view plain copy

虚拟机软件及Linux操作系统安装操作步骤

虚拟机软件及Linux操作系统安装操作步骤 一.虚拟机软件的安装 在Windows系统系安装适合的Windows版本的VMware Workstation后,就可以在VMware Workstation上创建虚拟机了,之后运行创建的虚拟机即可在虚拟机上安装CentOS Linux操作系统的过程和在实际生产环境下安装是一样的. 1.创建一个VM虚拟机实践 1.1.创建一个新的虚拟机 1)虚拟机软件安装完毕后,双击桌面上的VMwareWorkstation图标或者在开始菜单里到VMware Work

jquery的常用操作(操作html页面的Dom对象的元素)

一:页面加载完成时,会执行jquery的方法(不需要等待图片加载完成,只要dom结构加载完成,就执行该方法) //第一种写法: $(document).ready(function() { // 执行体 }); //第二种写法 $(function() { //执行体 }); 二:用jquery获取dom对象,判断该对象是否有内容的两种方法(有返回true,没有返回false) jqObj.text().trim() var jqObj = $(this); if(jqObj.text().tr

C#DataTable 的一些操作经常操作

关于C# DataTable 的一些操作 经常操作DATATABLE  对于一些不需要再通过sql 来重复操作的   可以通过操作datatable来达到同样的效果 方法一: 也是广为人知的一种: YourDataTable.Columns.Remove("列名"); 但是这种情况只适合于去掉很少列的情况. 如果有很多列我却只要一两列呢,那就得用方法二了. 方法二: DataTable dat = YourDataTable.DefaultView.ToTable(false, new

[python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作

几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作数.下面的值被视为假: None False 任何数值类型的零,例如,0. 0L.0.0. 0j. 任何空的序列,例如, ''. (). []. 任何空的映射,例如,{}. 用户定义的类的实例,如果该类定义一个__nonzero__()或__len__()的方法,在该方法返回整数零或布尔值False

jQuery-介绍 加载 选择器 样式操作 属性操作 绑定click事件

jQuery - 介绍 加载 选择器 样式操作 属性操作 绑定click事件 注意:以下部分问题不能实现效果,因该是单词拼写错误(少个t)或者没有加引号(“swing”)... jquery介绍 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. jQuery的版本分为1.x系列和2.x.3.x系列,1.x系列兼容低版本的浏览器,2.x.3.x系列放弃支持低版本浏览器

超级管理员登录后如果连续XX分钟没有操作再次操作需要重新登录

首先在设置session页面时 session_start(); session("name",$adminname); //加入session时间 time() session("time",time()); 再进入 防非法登录的控制器 class CommonController extends Controller { public function __construct() { parent::__Construct(); if(empty($_SESSI

python基础10 字符串操作,字典操作,集合操作

本节内容: 字符串操作 字典操作 集合操作 字符串操作 概述 字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等.请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符. 如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" "括起来表示: "I'm OK" 类似的,如果字符串包含",我们就可以用'

redis python 操作 Python操作Redis数据库

原文章于此:https://www.cnblogs.com/cnkai/p/7642787.html 有个人修改与改正 连接数据库 StrictRedisfrom redis import StrictRedis #!/usr/bin/env python # coding: utf-8 from redis import StrictRedis from redis import ConnectionPool # 使用默认方式1 链接到数据库 # redis = StrictRedis(hos