//
// 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()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。