IOS NSOperationQueue(线程 封装操作)
#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(线程 封装操作)的更多相关文章
- iOS子线程操作UI问题检查
iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了 ...
- iOS子线程操作检测版本更新,有新版本通知用户更新, CheckVersion
iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore ...
- iOS 开发线程 gcd
基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
- iOS中线程同步基本详解
为什么使用线程同步技术:多个线程是同时执行的 如果多个线程同时操作一个资源 会造成此资源的数据错乱 线程同步简介 线程同步,多条线程按顺序地访问某个资源 注意:此处的同步不是一起执行的意思 是一个一个 ...
- 线程封装组件(BackgroundWorker)和线程(Thread)
BackgroundWorker是微软的在.net Framwork中添加的一个组件,主要对线程的访问提供了一种安全的方式.简单的说就是对Thread的一次封装. BackgroundWorker位于 ...
- 【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- wusir 线程间操作无效: 从不是创建控件“”的线程访问它 解决办法
利用FileSystemWatcher设计一个文件监控系统时,如果一个文件被修改或者新建,则文件修改事件会被多次触发而产生多条信息.为了将一个文件被修改一次而产生的多条信息归结为一条,在设计中新开了一 ...
- iOS蓝牙原生封装,助力智能硬件开发
代码地址如下:http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手环 ...
随机推荐
- 删除重复数据,保留一条ID最小的
SELECT * from TBCITY_Temp where code in ( select code from TBCITY_Temp group by code hav ...
- 利用Content-disposition实现无刷新下载图片文件
今天在使用 tinypng.com 这个在线压缩图片的网站时,对其处理完图片后,可以无刷新下载图片感到好奇,于是了解了一下相关实现.无刷新下载可以利用MIME type或者设置Content-disp ...
- python中bytes类型转换为str类型
使用的原因:基于URL解析报文的时候,要使用str类型,但是提供的确实bytes类型,报错: TypeError: must be str, not bytes 所以就把bytes类型转换为str类型 ...
- c# yield关键字原理
https://www.cnblogs.com/blueberryzzz/p/8678700.html c# yield关键字原理详解 1.yield实现的功能yield return:先看下面的代码 ...
- MSF利用ms17-010漏洞过程记录
1.使用网上以上一个监测工具,扫描出存在ms17-010的主机地址 2.在kali中使用MSF进行检测,存在mf17-010漏洞 msf > use auxiliary/scanner/smb/ ...
- python升级到3.*版本
转载https://blog.csdn.net/liang19890820/article/details/51079633 简述 CentOS 7 中默认安装了 Python,版本比较低(2.7.5 ...
- 9-----BBS论坛
BBS论坛(九) 9.1.权限和角色模型定义 (1)cms/models class CMSPermission(object): ALL_PERMISSION = 0b11111111 # 1.访问 ...
- [转]AngularJS 使用 UI Router 实现表单向导
本文转自:http://www.oschina.net/translate/angularjs-multi-step-form-using-ui-router 今天我们将使用AngularJs和伟大的 ...
- fuser解决The requested resource is busy
AIX 下出现umount busy | 处理 2011-08-17 17:22:57| 分类: AIX|字号 订阅如果一个文件系统打开了一个文件,那么必须在卸载之前将该文件关闭.例如:# umo ...
- S3C2440 中断相关寄存器小探
========================================== 转载时请注明出处和作者联系方式 文章出处:http://blog.csdn.net/longintchar 作者联 ...