专栏首页sktjIOS Operation实现多线程

IOS Operation实现多线程

 1 var topImageView = UIImageView()
 2 var footImageView = UIImageView()
 3 override func viewDidLoad() {
 4 super.viewDidLoad()
 5 // Do any additional setup after loading the view,
 typically from a nib.
 6 topImageView = UIImageView(frame:CGRect(x:0,
 y:0, width:320, height:280))
 7 self.view.addSubview(topImageView)
 8
 9 footImageView = UIImageView(frame:CGRect(x:0,
 y:280, width:320, height:290))
 10 self.view.addSubview(footImageView)
 11
 12 let downloadA = getOperation(name:”下载线程 A”,
 imageUrl:
 “http://images.apple.com/v/watch/k/images/overview/watch_03_large.jpg”,
 isTopOne:true)
 13
 14 let downloadB = getOperation(name:”下载线程B”,
 imageUrl:“http://images.apple.com/v/watch/k/images/overview/watch_05_large.jpg”,
 isTopOne:false)
 15
 16 let queue = OperationQueue()
 17 queue.maxConcurrentOperationCount = 1
 18 queue.addOperation(downloadA)
 19 queue.addOperation(downloadB)
 20
 21 for operation in queue.operations{
 22 print(“Operation名称:”+operation.name!)
 23 }
 24 }
 25 func getOperation(name:String, imageUrl:String,
 isTopOne:Bool) -> BlockOperation{
 26 let download = BlockOperation(block:{_ in
 27 let url = URL(string:imageUrl)
 28 var data:Data!
 29 do{
 30 Thread.sleep(forTimeInterval:1.0)
 31 try data = Data(contentsOf:url!)
 32 let image = UIImage(data:data)
 33 if isTopOne{
 34 self.perform(#selector(ViewController.showTopImage),
 on:Thread.main, with: image, waitUntilDone:true)
 35 }
 36 else{
 37
 self.perform(#selector(ViewController.showFootImage), on:
 Thread.main, with: image, waitUntilDone:true)
 38 }
 39 }catch{
 40 print(“下载图片失败。”)
 41 }
 42 })
 43 download.name = name
 44 return download
 45 }
 46 func showTopImage(image:UIImage){
 47 self.topImageView.image = image
 48 }
 49
 50 func showFootImage(image:UIImage){
 51 self.footImageView.image = image
 52 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 子类中扩张超类属性

    class Person: def init(self, name): self.name = name

    用户5760343
  • flask 页面消息提醒flash

    //flash {% for message in get_flashed_messages() %} <div class="alert alert-wa...

    用户5760343
  • python flask web开发实战 页面消息提醒 常用

    from flask import Flask, render_template, session, redirect, url_for, flash @ap...

    用户5760343
  • Kubernetes中的Configmap和Secret

    如果需要向容器传递参数,可以在Yaml文件中通过command和args或者环境变量的方式实现。

    大江小浪
  • Shapefile属性操作之改

    在上篇的《Shapfile属性操作之增》和《Shapefile属性操作之删》中我们分别介绍了对于空间矢量数据属性的增加(CREATE)和删除(DELETE)操作...

    卡尔曼和玻尔兹曼谁曼
  • 前端开发教程:Javascript中如何定义类?

    Javascript虽然不是面向对象语言,但是我们一样可以实现类的定义,工作中我们定义类一般用下面的方式,如下:

    用户4831957
  • k8s-kubernetes-configmap存储

    ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。 ConfigMap API给我们提...

    eadela
  • 运营岗SQL面试题

    近日在群里看到一份运营岗位SQL笔试题目,感觉不错,拿来体验一下,还是有点难度的。

    披头
  • 通过命令curl 操作ElasticSearch指南

    match 如果在全文字段上查询,会使用正确的分析器分析查询字符串;如果精确值字段使用,会精确匹配。 term精确匹配,只要包含了对应的文本就可以,不对文本分析...

    爬蜥
  • python基于selenium+cv2

     I.打开pycharm,点击Settings,找到Project Interpreter,点击右边的下拉菜单下的show All...选项

    py3study

扫码关注云+社区

领取腾讯云代金券