多线程编程:下载数据时,开辟子线程,减少阻塞时间,和主线程并发运行,提升用户体验

1.Thread

1>新建Thread对象,带一selector方法,调用start方法,开启子线程

2>thread初始化自带的selector方法中请求数据

3>数据请回来后,调用self的performSelectorOnMainThread方法,又带一selector,以及相应的参数,通常是请求回的数据,如果不是self,将找不到selector方法//必须是self

4>对请求回的数据进行处理,实现UI更新

2.GCD-great central dispatch

1>使用DispatchQueue类型新建队列

2>dispatch_queue.async{

//请求数据代码

//切回主线程

DispatchQueue.main.async{

//更新UI代码

}

}

3.Operation

1>使用OperationQueue类型新建队列

2>使用BlockOperation类型新建操作,操作中先请求数据,在调用self的performSelectorOnMainThread方法切回主线程,最后更新UI

code:

let operation = BlockOperation {

let url = URL(string:"http://pic37.nipic.com/20131227/17514635_163144299116_2.jpg")

let data = NSData(contentsOf: url!) as! Data

let img = UIImage(data: data)

//用指定方法更新UI,调用者必须为当前的viewController!!!

self.performSelector(onMainThread: #selector(self.updateImage(image:)), with: img, waitUntilDone: false)

}

queue.addOperation(operation)

3>将操作加入队列

ios多线程开发基础的更多相关文章

  1. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  2. iOS多线程开发

    概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操 ...

  3. iOS多线程开发资源抢夺和线程间的通讯问题

    说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题.举例来说,每年春节都是一票难 ...

  4. iOS多线程开发--NSThread NSOperation GCD

    多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势 ...

  5. iOS多线程开发之离不开的GCD(上篇)

    一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的方法来进⾏并发程序编写.从基本功能上讲,GCD有点像NSOperatio ...

  6. ios多线程开发总结

    1>无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU空闲时就会执行). 2>更新UI应该在主线程(UI线程)中进行,并且推荐使用同步 ...

  7. ios多线程开发的常用三种方式

    1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSelector:@selector ...

  8. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...

  9. ios 多线程开发(一)简介

    简介 线程是在一个程序中并发的执行代码的方法之一.虽然有一些新的技术(operations, GCD)提供了更先进高效的并发实现,OS X和iOS同时也提供了创建和维护线程的接口. 这里将要介绍线程相 ...

随机推荐

  1. USB NCM介绍

    ​1 功能概述 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device ...

  2. 用navigation的大致图

  3. GO学习-(18) Go语言基础之并发

    Go语言基础之并发 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微 ...

  4. Spring的controller接受Date类型数据,接受枚举类型数据

    1. Controller接收Date类型的数据 核心使用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 来将传递过来的时间字符串 ...

  5. h264和h265多维度区别

    h264和h265多维度区别 1.  概述 h265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,很多朋友不知道h264和h265如何区别,下面让我们一起来了解一下 ...

  6. 图分析Rapids cuGraph

    图分析Rapids cuGraph 英伟达(Nvidia)建立的新的开源库可能是推进分析和使图形数据库更快的秘密要素. 在Nvidia GPU上进行并行处理. Nvidia很久以前就不再只是" ...

  7. 外部NORFlash是第一个以硬件为基础的信任

    外部NORFlash是第一个以硬件为基础的信任 External NOR Flash memory is first with hardware root-of-trust 英飞凌科技公司宣布了它声称 ...

  8. mysql表ERROR 144 (HY000)Table 'dede_archives' is marked

    1.故障现象 mysql> select count(*) from dede_archives;ERROR 144 (HY000): Table '.xx' is marked as cras ...

  9. oracle单机开机自启动

    ====================== 单机数据库开机自启动  ============================= 环境: oracle数据库单机 版本:11.2.0.4 1.修改配置文 ...

  10. 1738. 找出第 K 大的异或坐标值

    2021-05-19 LeetCode每日一题 链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/ 标 ...