#import "HMViewController.h"

@interface HMViewController ()

@end

@implementation HMViewController

- (void)viewDidLoad
{
[super viewDidLoad]; [self operationQueue2];
} - (void)operationQueue2
{
NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]);
}];
NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]);
}];
[operation2 addExecutionBlock:^{
NSLog(@"NSBlockOperation------下载图片22---%@", [NSThread currentThread]);
}]; NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = ; [queue addOperation:operation1];
[queue addOperation:operation2]; [queue addOperationWithBlock:^{
NSLog(@"NSBlockOperation------下载图片3---%@", [NSThread currentThread]);
}];
} - (void)opeationListen
{
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
for (int i = ; i<; i++) {
NSLog(@"NSBlockOperation------下载图片---%@", [NSThread currentThread]);
}
}];
operation.completionBlock = ^{
// ...下载完图片后想做事情
NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]);
}; NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
} - (void)operationQueue
{
// 1.封装操作
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];
// operation1.queuePriority = NSOperationQueuePriorityHigh NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil]; NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
for (int i = ; i < ; i++) {
NSLog(@"NSBlockOperation------下载图片---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
}];
// [operation3 addExecutionBlock:^{
// for (int i = 0; i<10; i++) {
// NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]);
// [NSThread sleepForTimeInterval:0.1];
// }
// }]; // 2.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = ; // 2 ~ 3为宜 // 设置依赖
[operation2 addDependency:operation3];
[operation3 addDependency:operation1]; // 3.添加操作到队列中(自动执行操作, 自动开启线程)
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3]; // [queue setSuspended:YES];
} - (void)blockOperation
{
// 1.封装操作
// NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
// NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]);
// }]; NSBlockOperation *operation = [[NSBlockOperation alloc] init]; [operation addExecutionBlock:^{
NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]);
}]; [operation addExecutionBlock:^{
NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]);
}]; [operation addExecutionBlock:^{
NSLog(@"NSBlockOperation------下载图片3---%@", [NSThread currentThread]);
}]; // 2.执行操作
[operation start];
} - (void)invocationOperation
{
// 1.创建操作对象, 封装要执行的任务
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil]; // 2.执行操作(默认情况下, 如果操作没有放到队列queue中, 都是同步执行)
[operation start];
} - (void)download
{
for (int i = ; i<; i++) {
NSLog(@"------download---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
} - (void)run
{
for (int i = ; i<; i++) {
NSLog(@"------run---%@", [NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
}
} @end

IOS NSOperationQueue(线程 封装操作)的更多相关文章

  1. iOS子线程操作UI问题检查

    iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了 ...

  2. iOS子线程操作检测版本更新,有新版本通知用户更新, CheckVersion

    iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore ...

  3. iOS 开发线程 gcd

      基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation ...

  4. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

  5. iOS中线程同步基本详解

    为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...

  6. 线程封装组件(BackgroundWorker)和线程(Thread)

    BackgroundWorker是微软的在.net Framwork中添加的一个组件,主要对线程的访问提供了一种安全的方式.简单的说就是对Thread的一次封装. BackgroundWorker位于 ...

  7. 【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. wusir 线程间操作无效: 从不是创建控件“”的线程访问它 解决办法

    利用FileSystemWatcher设计一个文件监控系统时,如果一个文件被修改或者新建,则文件修改事件会被多次触发而产生多条信息.为了将一个文件被修改一次而产生的多条信息归结为一条,在设计中新开了一 ...

  9. iOS蓝牙原生封装,助力智能硬件开发

    代码地址如下:http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手环 ...

随机推荐

  1. tomcat 虚拟目录配置appBase和docBase的区别

    先看server.xml文件host配置   <Host name="localhost" appBase="webapps"      可以修改成自己想 ...

  2. Oracle的CLOB大数据字段类型

    转载:https://www.cnblogs.com/Grand-Jon/p/7389427.html 一.Oracle中的varchar2类型 我们在Oracle数据库存储的字符数据一般是用VARC ...

  3. 12-----BBS论坛

    BBS论坛(十二) 12.1.图形验证码生成 (1)utils/captcha/init.py import random import string # Image:一个画布 # ImageDraw ...

  4. component: resolve => require(['../pages/home.vue'], resolve)

    component: resolve => require(['../pages/home.vue'], resolve) vue 路由的懒加载 import Vue from 'vue' im ...

  5. 01-取消文件与svn服务器的关联

    有的时候一个和svn服务器关联的文件,svn的链接已经失效,但是文件还是显示和svn关联的状态. 下面主要是解决怎么取消一个文件和svn服务器的关联. 1 新建一个文本文件 在任意目录下新建一个文本文 ...

  6. Tiled 地图编辑器使用教程-官方demo

    一.Tiled Map Editer 下载地址 http://www.mapeditor.org/download.html 二.官方教程查看 下载安装后,不管windows还是Mac系统都包含官方例 ...

  7. C#委托(一)——说明及举例

    C#命名空间下有五种类型,分别为: 类.构造.接口.枚举.委托. 委托被定义为5中基本类型的一种,也就意味着代码可以这么写: using System; namespace Test { delega ...

  8. Model对象嵌套list赋值方式(备忘)

    首先定义Model对象:var deliveryInfoModel = new DeliveryInfo(); 第二步定义嵌套的list对象:var list = new List<Delive ...

  9. 显示器分辨率不同,部分winform控件在其他机器上显示不全

    在开发机器上效果如下: 而到其他电脑上效果如下: 解决办法: 将窗体的AutoScaleMode属性设置为None,尝试一下,应该可以了. 关于AutoScaleMode的属性,可以参考 http:/ ...

  10. java高级技术交流群

    <明天的地平线>专注Java相关技术:SpringBoot.SpringCloud.MyBatis.Docker.微服务.集群.分布式.Linux.Jenkins.Netty.Angula ...