swift_多线程基础_最简单用法(GCD, NSOperationQueue, NSThread)
2016-01-14 17:10
585 查看
//
// ViewController.swift
// study1-1
//
// Created by admin on 15/12/28.
// Copyright © 2015年 admin. All rights reserved.
//
import UIKit
class ViewController:
UIViewController {
@IBOutlet var myLable:UILabel?
@IBAction func clickButton(){
// IOS中多线程有以下三种实现方法
// 1. GCD
//
子线程中请求网络
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0),{
// 开始网络请求
self.sendData()
//
在主线程中更新UI
dispatch_async(dispatch_get_main_queue(), {
self.updateLable()
})
})
// 2. NSOperationQueue:
系统提供的类,直接在这个累方法中将需要多线程执行的代码放入即可,但是同时要将UI更新放入主线程,则只能把UI更新的代码通过GCD方式添加到主线程中
let myOperation =
NSBlockOperation(block: {
self.sendData1()
// 这里要注意在sendData1()中将UI更新使用GCD添加到主线程
})
NSOperationQueue().addOperation(myOperation)
// 3. NSThread
NSThread.detachNewThreadSelector("sendData1", toTarget:
self, withObject:
nil)
}
//
发送数据,
// 一般放在子线程中,如果放在主线程中会阻塞UI的更新,造成假死现象
func sendData(){
sleep(5)
}
//
更新UI
// 一般放在主线程中
func updateLable(){
myLable?.text =
"数据发送成功"
}
func sendData1(){
sleep(5)
//
在主线程中更新UI
dispatch_async(dispatch_get_main_queue(), {
self.updateLable()
})
}
override func viewDidLoad()
{
super.viewDidLoad()
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
}
// ViewController.swift
// study1-1
//
// Created by admin on 15/12/28.
// Copyright © 2015年 admin. All rights reserved.
//
import UIKit
class ViewController:
UIViewController {
@IBOutlet var myLable:UILabel?
@IBAction func clickButton(){
// IOS中多线程有以下三种实现方法
// 1. GCD
//
子线程中请求网络
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0),{
// 开始网络请求
self.sendData()
//
在主线程中更新UI
dispatch_async(dispatch_get_main_queue(), {
self.updateLable()
})
})
// 2. NSOperationQueue:
系统提供的类,直接在这个累方法中将需要多线程执行的代码放入即可,但是同时要将UI更新放入主线程,则只能把UI更新的代码通过GCD方式添加到主线程中
let myOperation =
NSBlockOperation(block: {
self.sendData1()
// 这里要注意在sendData1()中将UI更新使用GCD添加到主线程
})
NSOperationQueue().addOperation(myOperation)
// 3. NSThread
NSThread.detachNewThreadSelector("sendData1", toTarget:
self, withObject:
nil)
}
//
发送数据,
// 一般放在子线程中,如果放在主线程中会阻塞UI的更新,造成假死现象
func sendData(){
sleep(5)
}
//
更新UI
// 一般放在主线程中
func updateLable(){
myLable?.text =
"数据发送成功"
}
func sendData1(){
sleep(5)
//
在主线程中更新UI
dispatch_async(dispatch_get_main_queue(), {
self.updateLable()
})
}
override func viewDidLoad()
{
super.viewDidLoad()
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
}
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Apple Swift学习教程
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 介绍 Fedora 上的 Swift
- C#实现多线程的同步方法实例分析
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析