加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 01:28:23 所属栏目:百科 来源:网络整理
导读:// // 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

//

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

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读