作者t19960804 (泥好嗎)
看板MacDev
標題[問題] 非同步觀念釐清
時間Thu Jan 31 10:12:51 2019
當我使用非同步的方法去取得資料時
為什麼需要用completion去做處理?
有去查了一下
但只說因為是非同步所以要用completion
我還是不太清楚這兩者之間的關係
求大大開釋
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.202.94
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MacDev/M.1548900773.A.443.html
1F:推 ch30529: 不知道什麼時候得到回應,又要在回應之後做 01/31 11:17
2F:推 darktt: 正常code的順序是同步的時候,而非同步的時候是不會等待 01/31 11:20
3F:→ darktt: 結果到了才接著下一行,而是先往下一行跑,等結果回來後再 01/31 11:20
4F:→ darktt: 處理 01/31 11:20
5F:→ darktt: 這要從Swift來看會比較快理解,Swift的閉包等同於method, 01/31 11:24
6F:→ darktt: 所以你可以當completion是一個特殊的method,是用來處理非 01/31 11:24
7F:→ darktt: 同步呼叫用的 01/31 11:24
8F:→ t19960804: 我把completion放進非同步方法的scope中處理回傳的資 01/31 11:38
9F:→ t19960804: 料,執行的順序變成上到下,所以資料才能傳入completio 01/31 11:38
10F:→ t19960804: n中,這樣的觀念是對的嗎? 01/31 11:38
11F:→ atst2: 想像一下你想要泡茶, 泡茶前要先燒開水; 但如果你一直等著 01/31 23:08
12F:→ atst2: 水燒開,其他事就不用做了; 所以你去買一個氣笛水壺, 水燒 01/31 23:10
13F:→ atst2: 開就自動通知你回來泡茶. 在這段時間你就可以做別的事. 01/31 23:10
14F:→ atst2: completion,或者是callback, 就像是氣笛的角色. 01/31 23:11
15F:推 gundam00: 把completion內跟其他部分都print出來 就知道了 02/01 14:24
16F:推 bbonline229: 推樓上 02/01 14:25
17F:推 ou9810: 建議你嘗試用gcd寫一個非同步的程式 175.98.152.120 03/22 17:08