Swift - 多线程实现方式(2) - NSOperation和NSOperationQueue
1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术:
(1)NSThread
(2)Cocoa NSOperation(NSOperation和NSOperationQueue)
(3)Grand Central Dispath(GCD)
Cocoa
NSOperation不需要关心线程管理和数据同步的事情,可以把精力放在自己需要执行的操作上。相关的类有NSOperation和
NSOperationQueue。其中NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的子
类:NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() var operation:NSBlockOperation = NSBlockOperation(block: { [weak self] in self?.downloadImage() return }) //创建一个NSOperationQueue实例并添加operation var queue:NSOperationQueue = NSOperationQueue() queue.addOperation(operation) } //定义一个下载图片的方法,线程调用 func downloadImage(){ var data = NSData(contentsOfURL: NSURL(string: imageUrl)!, options: nil, error: nil) println(data?.length) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }} |
(2)继承NSOperation
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //创建线程对象 var downloadImageOperation:DownloadImageOperation = DownloadImageOperation() //创建一个NSOperationQueue实例并添加operation var queue:NSOperationQueue = NSOperationQueue() queue.addOperation(downloadImageOperation) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }}class DownloadImageOperation: NSOperation { override func main(){ var data = NSData(contentsOfURL: NSURL(string: imageUrl)!, options: nil, error: nil) println(data?.length) }} |
4,设置运行队列并发数
|
1
2
|
//设置并发数queue.maxConcurrentOperationCount = 5 |
5,取消队列所有操作
|
1
2
|
//取消所有线程操作queue.cancelAllOperations() |
6,每个NSOperation完成都会有一个回调表示任务结束
|
1
2
3
4
5
6
7
|
//定义一个回调var completionBlock:(() -> Void)?//给operation设置回调operation.completionBlock = completionBlockdispatch_after(dispatch_time(DISPATCH_TIME_NOW, 4), dispatch_get_main_queue(), { println("Complete")}) |
Swift - 多线程实现方式(2) - NSOperation和NSOperationQueue的更多相关文章
- Swift - 多线程实现方式(1) - NSThread
1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术: (1)NSThread (2)Cocoa NSOperation(NSOperation和NSOperationQueu ...
- Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术: (1)NSThread (2)Cocoa NSOperation(NSOperation和NSOperationQueu ...
- iOS 多线程 NSOperation、NSOperationQueue
1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...
- 『NSOperation、NSOperationQueue』详解
1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...
- iOS开发:Swift多线程NSOperation的使用
介绍: NSOperation是基于GCD实现,封装了一些更为简单实用的功能,因为GCD的线程生命周期是自动管理,所以NSOperation也是自动管理.NSOperation配合NSOperatio ...
- 用NSOperation和NSOperationQueue实现多线程编程
1.上一讲简单介绍了NSThread的使用,虽然也可以实现多线程编程,但是需要我们去管理线程的生命周期,还要考虑线程同步.加锁问题,造成一些性能上的开销.我们也可以配合使用NSOperation和NS ...
- [转] iOS多线程编程之NSOperation和NSOperationQueue的使用
<iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...
- iOS-----使用NSOperation与NSOperationQueue实现多线程
使用NSOperation与NSOperationQueue实现多线程 NSOperation与NSOperationQueue的基本理论如下. NSOperationQueue 代表一个FIFO的队 ...
- iOS多线程编程之NSOperation和NSOperationQueue的使用
前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是 ...
随机推荐
- 查锁住的表,以及kill进程,Oracle常用语句
--找出所有被锁的对象,定位出哪个回话占用 select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o ...
- POJ 1159 回文LCS滚动数组优化
详细解题报告可以看这个PPT 这题如果是直接开int 5000 * 5000 的空间肯定会MLE,优化方法是采用滚动数组. 原LCS转移方程 : dp[i][j] = dp[i - 1][j] + ...
- MFC逆向-消息响应函数的定位
MFC == Microsoft Foundation Class,微软基础类库,他封装了Windows API以便用户更快速的开发界面功能程序然而该库及其庞大而复杂,需要有C++的功底否则很难 ...
- phpmailer发送邮件,可以带附件
先从网上下载phpmailer压缩包 将解压的文件导入到你的项目中 实例 require_once ('PHPMailer/class.phpmailer.php'); //引入phpmailer文件 ...
- 神奇的矩阵 NOI模拟题
神奇的矩阵 题目大意 有一个矩阵\(A\),第一行是给出的,接下来第\(x\)行,第\(y\)个元素的值为数字\(A_{x-1,y}\)在\(\{A_{x-1,1},A_{x-1,2},A_{x-1, ...
- 管理tips
管理是什么? 我认为达到的目的就是高效.低成本. 成本低才能有盈余,才能活的长和舒服.高效就是无谓的消耗少,以结果为导向. 开源节流,应该包含显性的与隐性的两方面. 隐性成本: 1.会议成本;2.沟通 ...
- jquery插件讲解:轮播(SlidesJs)+验证(Validation)
SlidesJs(轮播支持触屏)——官网(http://slidesjs.com) 1.简介 SlidesJs是基于Jquery(1.7.1+)的响应幻灯片插件.支持键盘,触摸,css3转换. 2.代 ...
- Android圆形图片自定义控件
Android圆形图片控件效果图如下: 代码如下: RoundImageView.java package com.dxd.roundimageview; import android.content ...
- Jquery学习笔记:利用find和children方法获取后代元素
在很多场景下,需要根据一个已知的jquery对象,去查找其满足条件的后代节点. 这时可以利用 find函数和children来处理. find和children函数都可有一个参数,常见的是一个字符串, ...
- JVM调优总结(七)-典型配置举例1
以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...