iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
Software Development

iOS 從 Objective-c 進化為 Swift 的 30天之旅系列 第 15

[Day 15] Swfit GCD 單線程 多線程 簡易使用

  • 分享至 

  • xImage
  •  

前言

終於來到了day15
這也意味著我面試已經經過了15天的努力
104成績表

信箱裡面總共有51條面試通知
真正去面試的大約30間 有些來亂的

前兩個禮拜 每天固定面試兩家公司
地點台中 經驗兩年 作品10件
每一家公司自我介紹
以及作品集介紹說法皆一至
薪水都開 N+7~N+10
故意開高給他有個殺價空間

總共目前入取出爐有七家 (博弈3 傳產4)
薪水五家落於N
一家落於N+10 一家落於N+5
這些是有達到N的才考慮
沒有N的大有人在 我都推掉了

但N+10的感覺根本不是要我寫iOS
讓我很困惑
他們想找的應該是網頁人士
有使用過cordova的
哎 讓我真的不知道要不要去試試看
雖然有接觸過PHP html
但還是是熱衷於iOS上面啊
PHP報錯都不會很明確的性質
會讓找bug找到很頭痛
以前研究所慘痛經驗

N+5的也是要我寫cordova
而且還不用去公司上班
在家寫 what?

還是現在業界根本不知道
iOS程式碼事OC 或是 Swift
或是其實我早就要被cordova取代了
這樣的話說不定我進去會真的有所成長
人生好煩 選錯出來又要重新面世更煩
哭了

GCD

Swift

Grand Central Dispatch(GCD)
也就是很常使用的多線程or單線程
也是同步與異步 這幾種說法

這邊就介紹一般的簡易用法

async 是非同步 或是多線程
所有任務一起執行
一群大媽一起衝進廁所

sync 是同步 或是單線程
任務排序進行
一群大媽排隊進廁所

使用方法如以下程式碼
global通常是使用在資料的運用

var testStr : String = "1"
DispatchQueue.global(qos: .userInitiated).async {
    testStr = "2"
}

資料以外的UI更新
請用main更新
如以下程式碼

DispatchQueue.main.async {
    self.dateLabel.text = testStr
}

兩樣合體
又要改變數 又要改UI
結構如下
應該蠻簡單的
async與sync 自行更換兩種型態

var testStr : String = "1"
DispatchQueue.global(qos: .userInitiated).async {
    testStr = "2"
    DispatchQueue.main.async {
        self.dateLabel.text = testStr
    }
}

OC

轉譯過來應該是這樣
可以比對一下

NSString * testStr = "1";
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
    NSString * testStr = "2";
    dispatch_async(dispatch_get_main_queue(), ^{
        self.dateLabel.text = testStr;
    });
});

延遲宣告

如果要延遲宣告一些func
可以用以下程式碼

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
    self.addView()
})

上一篇
[Day 14] Swift For 簡易使用 與 Button Tag呼叫運用
下一篇
[Day 16] Swift 成本功能部分串接
系列文
iOS 從 Objective-c 進化為 Swift 的 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言