iOS开发:Swift多线程NSThread的使用
一:创建线程,NSThread创建线程常用的三种方式:
//1:手动创建启动
let thread:NSThread = NSThread(target: self, selector:"doSomething:", object: "param")
thread.name = "childThread1" //手动创建线程的方式可以设置线程的名称
thread.start()
//2:创建完成自动start
NSThread.detachNewThreadSelector("doSomething:", toTarget: self, withObject: "param")
//3 隐式创建自动start
self.performSelectorInBackground("doSomething:", withObject: "param")
二:NSThread常用函数
//1. 获取主线程
NSThread.mainThread()
//2. 获取当前线程
NSThread.currentThread()
//3. 线程睡眠
NSThread.sleepForTimeInterval(<#T##ti: NSTimeInterval##NSTimeInterval#>)
NSThread.sleepUntilDate(<#T##date: NSDate##NSDate#>)
三:线程同步以及线程安全
//线程同步:防止多个线程抢夺统一资源造成的数据安全问题
//给代码块加锁,保证线程安全
let lock:NSLock = NSLock()
lock.lock()
//something
lock.unlock()
四:线程间通信
//保证线程安全,在子线程完成后回到主线程更新UI waitUntilDone表示是否等待完成,如果为true,则回到主线程完成操作后,在执行下面的代码
self.performSelectorOnMainThread("doSomething", withObject: "param", waitUntilDone: false)
//如果只更新单个控件,可使用以下更简便的方法,比如设置图片
let imageView:UIImageView=UIImageView()
imageView.performSelectorOnMainThread("setImage:", withObject: UIImage(), waitUntilDone: false)
五:线程延时执行
// 延迟执行(注意,延迟执行请勿使用线程睡眠来实现,会阻塞当前线程)
self.performSelector("doSomething:", withObject: "param", afterDelay: )
完!
iOS开发:Swift多线程NSThread的使用的更多相关文章
- iOS开发Swift篇(02) NSThread线程相关简单说明
iOS开发Swift篇(02) NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThread在s ...
- iOS开发之多线程(NSThread、NSOperation、GCD)
整理一些多线程相关的知识. 并行 & 并发 1.并行:并行是相对于多核而言的,几个任务同时执行.2.并发:并发是相对于单核而言的,几个任务之间快速切换运行,看起来像是"同时" ...
- 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明
李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...
- iOS开发之多线程技术
本篇争取一篇讲清讲透,依然将通过四大方面清晰的对iOS开发中多线程的用法进行详尽的讲解: 一.什么是多线程 1)多线程执行原理 2)线程与进程 3)多线程的优缺点 二.我们为什么要用多线程编程技术 三 ...
- iOS开发-多线程开发之线程安全篇
前言:一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个对象.同一个变量.同一个文件和同一个方法等.因此当多个线程访问同一块资源时,很容易会发生数据错误及数据不安 ...
- iOS开发-多线程编程技术(Thread、Cocoa operations、GCD)
简介 在软件开发中,多线程编程技术被广泛应用,相信多线程任务对我们来说已经不再陌生了.有了多线程技术,我们可以同做多个事情,而不是一个一个任务地进行.比如:前端和后台作交互.大任务(需要耗费一定的时间 ...
- ios开发之多线程---GCD
一:基本概念 1:进程:正在运行的程序为进程. 2:线程:每个进程要想执行任务必须得有线程,进程中任务的执行都是在线程中. 3:线程的串行:一条线程里任务的执行都是串行的,假如有一个进程开辟了一条线程 ...
- iOS开发Swift篇—(一)简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- iOS开发Swift篇—(三)字符串和数据类型
iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www ...
随机推荐
- IntelliJ IDEA 15 显示工具栏及底部周边工具栏
- oracle——merge
一.概述 使用merge声明从一个或者更多个表或视图中筛选记录,以用来更新或者插入到一个表或视图中.你可以指定条件以决定是执行update操作还是insert操作到目标表或视图中. 这个声明是一个 ...
- function复习
#include <iostream> #include <functional> using namespace std; int fun(int a) { std::cou ...
- iOS开发网络编程之断点续传-NSURLConnection
最近在做一个小项目的时候,发现使用NSURLSession或者AFNNetworking进行断点续传时诸多的不便,于是自己封装了一个类来实现断点续传,在程序重新启动时仍然可以继续下载(需自己调用方法) ...
- 【技术贴】解决bug mantisbt APPLICATION ERROR #1502 没有找到类别
解决bug mantisAPPLICATION ERROR #1502 没有找到类别 mantisbt出现1502问题解决:引起问题的原因:当提交的问题有分类,此时删除此分类,就会出现下面的情况.问题 ...
- PHP读取xml方法讲解
一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Marku ...
- hdu 1754 线段树入门
线段树点修改 区间最大值查询 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- app被Rejected 的各种原因翻译
1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...
- 解决jquery版本冲突问题
解决jQuery1.3.2和1.4.2的冲突.(测试通过) 第一步:在1.4.2的源代码的最后加上一句 var $j4 = jQuery.noConflict(true);//之所以在源码这里加,而不 ...
- linux上部署应用
1.编写traffic.sh 引入相关的jar包及java环境路径 2.crontab -e 加入: */10 * * * * cd /opt/sys/traffic_version/bin & ...