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

前端之家收集整理的这篇文章主要介绍了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()

}

}

原文链接:https://www.f2er.com/swift/324902.html

猜你在找的Swift相关文章