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

}

}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...