微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift_多线程基础_最简单用法GCD, NSOperationQueue, NSThread

//

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

}

}

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

相关推荐