//
// 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()
}
}