Slide 1

Slide 1 text

Safe Area @johnlinvc ҝॄኄ App 㠡㠡తʁ John Lin ( @johnlinvc )

Slide 2

Slide 2 text

Safe Area @johnlinvc John Lin (@johnlinvc) • ኺ iPhone OS 2 ։࢝ሜ Obj-Cɻ • ໨લࡏ West Pharmaceutical ᙛ DevOpsɻ
 ሢ໳ሜڅ։ᚙऀʢแؚࣗݾʣ༻త޻۩ɻ
 ؐ༗मผਓత Bugɻ

Slide 3

Slide 3 text

Safe Area @johnlinvc تᓣჩՃࣾ܈׆ಈ Functional Tuesday Ruby Taiwan Elixier Taiwan Taipei.py Clojure Taiwan

Slide 4

Slide 4 text

Safe Area @johnlinvc Swift Taipei • ኺ 2016 ೥ 1/14։࢝ɼࡏ㑌ݸ݄తୈҰݸᜌ፨ೋᎯ㭎ɻ౸໨લቮៃ㭎ྃ ઀ۙ 60 ࣍ᡉ။ɻ • ఏڙେՈҰݸೳⴺ์ᱷ౼࿦ Swift త஍ํɻ • ڧྗ㐸ٻߨऀதɻ୞ཁ࿨ Swift ᜗ඍ༗૬᮫త౎ඇৗᓣܴɻ

Slide 5

Slide 5 text

Safe Area @johnlinvc ৗৗࡏݚ౼။্෼ڗ RubyConf CN

Slide 6

Slide 6 text

Safe Area @johnlinvc iPlayground • ڈྃ iOSDC Japan ޙ᧷ಘ୆ᖯ໵ጯ֘༗ • ᙛ৔ങྃ iosdc.tw ໢Ҭɻ • ޙိܾఆཁڣ iPlaygroundɻ
 iosdc.tw ။ಋ౸ iplayground.io

Slide 7

Slide 7 text

Safe Area @johnlinvc ୈҰ࣍ߨ Keynote • ᅳ㚎֎ߨྃेز࣍ɼײँओ㭎ํڅզṜݸػ။ိᙛ Keynote ߨऀɻ • ऴԙՄҎ༻ Keynote ိ၏ Keynote ྃɻ

Slide 8

Slide 8 text

Safe Area @johnlinvc

Slide 9

Slide 9 text

Safe Area @johnlinvc iPlayground తओ୊ • ᙛવؐੋᅴ៴ࡏ App (ෆੋ˖ʽҰʽҰ) ্,ɻ • ෼ڗ૬᮫తመ຿ʢҏཕʣៃᱛɻ • ୳ࡧߋଟ։ᚙ্తՄೳੑɻ

Slide 10

Slide 10 text

Safe Area @johnlinvc Ұݸ޷ App తᑍ݅ 1. ූ߹঎ۀधٻɻ 2. ༻ىိॱखɻ 3. Optional<ඬ྄తఔࣜᛰ>ɻ

Slide 11

Slide 11 text

Safe Area @johnlinvc Ұݸ޷ App తᑍ݅ 1. ූ߹঎ۀधٻɻ 2. ༻ىိॱखɻ 3. Optional<ඬ྄తఔࣜᛰ>ɻ

Slide 12

Slide 12 text

Safe Area @johnlinvc ၏աҰਞࢠతਓػհ໘ݚڀ

Slide 13

Slide 13 text

Safe Area @johnlinvc ॄኄੋॱख • ֎᧺ඬ྄ • ᔒ༗൓ਓྨతૢ࡞ྲྀఔ • ߦҝූ߹࢖༻ऀ༬ظ

Slide 14

Slide 14 text

Safe Area @johnlinvc ॄኄੋॱख • ֎᧺ඬ྄ • ᔒ༗൓ਓྨతૢ࡞ྲྀఔ • ߦҝූ߹࢖༻ऀ༬ظ

Slide 15

Slide 15 text

Safe Area @johnlinvc ࢖༻ऀ༬ظతߦҝ • ࢖༻ऀత༌ೖཁ༗దᙛతճᰶɻ • ྗճᰶɻ • ࢹ᧷ճᰶɻ

Slide 16

Slide 16 text

Safe Area @johnlinvc ྗճᰶ • ଧ伴൫త࣌ީ௨ৗෆ။؃伴൫ɻ
 ػց伴൫తྗճᰶᩋզ၇҈ىိൺֱਅመɻ • iPhone 7/8 ্తHome伴ɻ
 ଖመੋݻఆతɼᯪ਒ಈᩋզ၇ײ᧷༗҈Լڈతײ᧷ɻ

Slide 17

Slide 17 text

Safe Area @johnlinvc ࢹ᧷ճᰶ • ᦊນ্త࢖༻ऀհ໘౎ੋࢹ᧷ճᰶతҰ෦෼ɻ • ᴍ㐝ޙతճᰶɼ૾ੋબᎩޙతᏓ৭ɼ
 ҃ੋҠಈ౸ԼҰݸᙘ໘ɻ • 䇪ಈޙతճᰶɼ૾ੋᰖֹࣔ֎త㚎༰ɼ
 ҃ੋҠಈᙘ໘্త෺ᱪɻ

Slide 18

Slide 18 text

Safe Area @johnlinvc ॄኄੋ㠡㠡తʁ • ࿝䷩㘸㠡㠡తɻ • ᙘ໘ෆ࿈᠃ɻ • ༌ೖ౸ࢹ᧷ճᰶత࣌ؒࠩଠ௕ɻ

Slide 19

Slide 19 text

Safe Area @johnlinvc ᙘ໘త࿈᠃ੑ • ਅመੈքత෺ᱪతҠಈੋ࿈᠃తɻ • ࡏᰖࣔ෺ᱪҠಈ࣌ɼ೗Ռਓ؟ೳⴺᚙݱ
 தؒ༗ඃ௓աతᙘ໘ɻब။᧷ಘ㠡㠡తɻ

Slide 20

Slide 20 text

Safe Area @johnlinvc ਓ؟తහ㕔౓ • 1991 ೥తݚڀɻࢹਆៃࡉ๔ሣᦊນરᗜత൓ጯɻ • ༻ిۃఁଌਓᱪࢹਆៃሣ CRT ᦊນરᗜత൓ጯɻ • Human electroretinogram responses to video displays,
 fluorescent lighting, and other high frequency sources

Slide 21

Slide 21 text

Safe Area @johnlinvc ਓ؟ՄҎ؃౸ 76 Hz తરᗜ

Slide 22

Slide 22 text

Safe Area @johnlinvc ༌ೖ౸ࢹ᧷ճᰶత࣌ؒࠩ • ਅመੈքత෺ᱪडྗޙ။ཱࠁҠಈɼ
 ᔒ༗೚Կ࣌ؒࠩɻ • ࢖༻ऀૢ࡞ޙաྃଠٱ࠽㗞ੜࢹ᧷ճᰶత࿩ɼ
 ब။᧷ಘ㠡㠡తɻ

Slide 23

Slide 23 text

Safe Area @johnlinvc ճᰶཁଟշ࠽ⴺշ • 2015 ೥తݚڀɼ
 ଌࢼ࢖༻ऀሣᨀ߇༌ೖతࢹ᧷ճᰶԆᬌ
 త༰೜౓ɻ • How Much Faster is Fast Enough? 
 User Perception of Latency &
 Latency Improvements in
 Direct and Indirect Touch

Slide 24

Slide 24 text

Safe Area @johnlinvc ճᰶཁଟշ࠽ⴺշ • ሣԙᴍ㐝࿨䇪፮༗ෆಉత༰೜౓ɻ • ᴍ㐝 69 ms • 䇪፮ 11 ms

Slide 25

Slide 25 text

Safe Area @johnlinvc ҝॄኄ။㠡㠡తʁ

Slide 26

Slide 26 text

Safe Area @johnlinvc > զ၇ိ໰Ұݸ኷؆ᄸత໰୊ɿզ၇ॴሜաతఔࣜɼେଟ౎ੋኺ಄౸ඌɺ ҰߦҰߦԟԼࣥߦɼࣥߦ׬ඟɼఔࣜब݁ଋʀಹኄɼҰݸ GUI ጯ༻ఔࣜ —ແ࿦ੋզ၇ݱࡏਖ਼ࡏላशత iOS ᢛ Mac OS Xɺؐੋଖଞฏ୆—ҝॄኄ ෆੋଧ։೭ޙҰ࿏ࣥߦ౸ఈ݁ଋɼࣕੋ။ఀཹࡏᦊນத౳଴զ၇ૢ࡞ʁ KKBOX iOS/Mac OS X جૅ։ᚙڭࡐ

Slide 27

Slide 27 text

Safe Area @johnlinvc Run loop

Slide 28

Slide 28 text

Safe Area @johnlinvc Ұݸ loop ཫ໘ཁ၏తࣄ ߋ৽ᙘ໘ Auto Release ᨀᚙ Timer ઀Ꮕࣄ݅ ႔ཧࣄ݅

Slide 29

Slide 29 text

Safe Area @johnlinvc Run Loop ᔒ༗ݻఆతिظ • ཁ౳౸ݱ༗త loop 䋯׬೭ޙɼ࠽။䋯ԼҰݸ loopɻ • ೗Ռࡏ Event Handler ཫ໘၏ྃଠଟࣄɼब။ᩋԼҰݸ loop Ԇޙ։ ࢝ɻ
 
 0 35 70 105 140 Loop 1 Loop 2 Loop 2

Slide 30

Slide 30 text

Safe Area @johnlinvc Ұݸ loop Ֆྃଠଟ࣌ؒ • ႔ཧ׈ಈ௒ա 11 ms => ׈ಈ㠡㠡త • ႔ཧᴍ㐝௒ա 69 ms => ᴍ㐝㠡㠡త

Slide 31

Slide 31 text

Safe Area @johnlinvc ղܾํ๏ • ॏෳར༻ view/cell/asset ɻ • ޷޷ར༻ଟ֩৺႔ཧثɻ

Slide 32

Slide 32 text

Safe Area @johnlinvc ղܾํ๏ • ॏෳར༻ view/cell/asset ɻ • ޷޷ར༻ଟ֩৺႔ཧثɻ

Slide 33

Slide 33 text

Safe Area @johnlinvc ॏෳ࢖༻ View/Cell • UICollectionView
 dequeueReusableCell(withReuseIdentifier:for:) • UIImage
 Cached: init(named:)
 Not Cached: init(contentsOfFile:) • MKMapView
 dequeueReusableAnnotationView(withIdentifier:)

Slide 34

Slide 34 text

Safe Area @johnlinvc Reusable • https://github.com/AliSoftware/Reusable • ՄҎ༻ Type Safe తํ๏ိఆٛ Reuse identifier. final class CustomCell: UITableViewCell, Reusable tableView.register(cellType: theCellClass.self) let cell = tableView.dequeueReusableCell(for: indexPath) as MyCustomCell

Slide 35

Slide 35 text

Safe Area @johnlinvc ղܾํ๏ • ॏෳར༻ view/cell/asset ɻ • ޷޷ར༻ଟ֩৺႔ཧثɻ

Slide 36

Slide 36 text

Safe Area @johnlinvc ଟ֩৺႔ཧث • iPhone 12 ্༗ 6 ݸ CPU ֩৺ɻ • ՄҎಉ࣌ࣥߦଟݸࣥߦॹɻ • ୞ཁ೺ࣄ৘෼ࢄ౸֤ݸ֩৺ɼबՄҎॖ୹ run loop ႔ཧ࣌ؒɻ

Slide 37

Slide 37 text

Safe Area @johnlinvc ࡏผత thread ၏ࣄతํ๏ • Dispatch • Combine

Slide 38

Slide 38 text

Safe Area @johnlinvc ࡏผత thread ၏ࣄతํ๏ • Dispatch • Combine

Slide 39

Slide 39 text

Safe Area @johnlinvc Dispatch • ࢖༻ Obj-C block & Swift closure ိ෧᧋ Thread APIɻ • جຊ্बੋ೺ code 㟚౸ queue ཫɼሏब။㢨㟬ࣥߦɻ

Slide 40

Slide 40 text

Safe Area @johnlinvc Dispatch • ༻ DispatchQueue.async बՄҎᩋ code ࡏผత Thread 䋯ɻ DispatchQueue.global(qos: .background).async { // code to run }

Slide 41

Slide 41 text

Safe Area @johnlinvc Refactoring legacy and concurrent thread API with Testing

Slide 42

Slide 42 text

Safe Area @johnlinvc ࡏผత thread ၏ࣄతํ๏ • Dispatch • Combine

Slide 43

Slide 43 text

Safe Area @johnlinvc Combine • ༻એࠂࣜతޠ๏ိఆٛࢿྉᢛࣄ݅႔ཧྲྀఔɻ • Scheduler ՄҎઃఆ૝ཁࡏ䬟Ұݸ Thread ্႔ཧࢿྉᢛࣄ݅ɻ

Slide 44

Slide 44 text

Safe Area @johnlinvc Combine • ՄҎ༻ receive(on:) ੾׵ Thread/Queue Just(1) .map { _ in print(Thread.isMainThread) } // true .receive(on: DispatchQueue.global()) .map { print(Thread.isMainThread) } // false .sink { print(Thread.isMainThread) } // false

Slide 45

Slide 45 text

Safe Area @johnlinvc ଧ։ Combine తҾ№֖ိ؃؃

Slide 46

Slide 46 text

Safe Area @johnlinvc UIKit ୞ೳࡏ main Thread ݺڣ • UIKit ᔒ༗ Thread Safetyɻ • ࡏผత஍ํݺڣత࿩။༗ Error ɻ • UI API called on a background thread: -[UIView initWithFrame:]

Slide 47

Slide 47 text

Safe Area @johnlinvc ආ໔ UIKit thread ໰୊ • ࡏ Dispatch ཫ༻ DispatchQueue.main ੾׵ճ Main Thread • ࡏ Combine ཫ༻ receive(on:) ੾׵ճ Main Thread • ࢖༻ SwiftUI

Slide 48

Slide 48 text

Safe Area @johnlinvc ආ໔ UIKit thread ໰୊ • ࡏ Dispatch ཫ༻ DispatchQueue.main ੾׵ճ Main Thread • ࡏ Combine ཫ༻ receive(on:) ੾׵ճ Main Thread • ࢖༻ SwiftUI

Slide 49

Slide 49 text

Safe Area @johnlinvc Swift UI • એࠂࣜత UI Frameworkɻ • ލฏ୆ɻ • Auto Layoutɻ

Slide 50

Slide 50 text

Safe Area @johnlinvc ࢖༻ Swift UI struct ContentView: View { @State var clickCount : Int = 0 var body: some View { Button(action: add) { Text("\(clickCount)") .font(.system(size: 120)) } } func add() { clickCount += 1 } }

Slide 51

Slide 51 text

Safe Area @johnlinvc ࢖༻ Swift UI struct ContentView: View { @State var clickCount : Int = 0 var body: some View { Button(action: add) { Text("\(clickCount)") .font(.system(size: 120)) } } func add() { clickCount += 1 } }

Slide 52

Slide 52 text

Safe Area @johnlinvc ࢖༻ Swift UI struct ContentView: View { @State var clickCount : Int = 0 var body: some View { Button(action: add) { Text("\(clickCount)") .font(.system(size: 120)) } } func add() { DispatchQueue.global().async{ clickCount += 1 } } }

Slide 53

Slide 53 text

Safe Area @johnlinvc ࢖༻ Swift UI struct ContentView: View { @State var clickCount : Int = 0 var body: some View { Button(action: add) { Text("\(clickCount)") .font(.system(size: 120)) } } func add() { DispatchQueue.global().async{ clickCount += 1 } } }

Slide 54

Slide 54 text

Safe Area @johnlinvc ࢖༻ Swift UI • ߋ৽UI ௨ৗ౎ੋಁա @State property wrapperɻ • @State ੋ Thread safe తɻՄҎኺ೚Կ Thread मվଞతᆴɻ

Slide 55

Slide 55 text

Safe Area @johnlinvc ղܾํ๏ • ॏෳར༻ view/cell/asset ɻ • ޷޷ར༻ଟ֩৺႔ཧثɻ

Slide 56

Slide 56 text

Safe Area @johnlinvc ෆ஌ಓኺ䬟։࢝վʁ

Slide 57

Slide 57 text

Safe Area @johnlinvc ෧᧋ʂ෧᧋ʂ࠶෧᧋ʂզཁ੒ҝ෧᧋େࢣʂ

Slide 58

Slide 58 text

Safe Area @johnlinvc ์։ಹݸ MVC

Slide 59

Slide 59 text

Safe Area @johnlinvc ख೺खት㟬༻ Clean Swift ॏߏ MVC, ฒସ֩৺ఔࣜᛰḤ ሜᄸݩଌࢼ

Slide 60

Slide 60 text

Safe Area @johnlinvc ዑվᆦʁዑվଠٱʁ

Slide 61

Slide 61 text

Safe Area @johnlinvc ኺᘐཱ։ᚙ౸େܕሢҊత CI/CD ߈ུ

Slide 62

Slide 62 text

Safe Area @johnlinvc iOS ։ᚙऀ 13 ഒ଎ٕ޼

Slide 63

Slide 63 text

Safe Area @johnlinvc ࡏผత thread ၏ࣄతํ๏ • Dispatch • Combine

Slide 64

Slide 64 text

Safe Area @johnlinvc ೗Ռ֩৺໵શᕝྃʁ • ਅత༗ଠଟࣄ৘ཁ၏ɼबࢉ༻ྃ Dispatch/Combine/async ໵။㠡ʁ • ਅతᔒ༗㭎๏ྃ䆩ʁ

Slide 65

Slide 65 text

Safe Area @johnlinvc 㟬༗ᔒ༗૝աʁ • ᙛఔࣜ㠡ॅత࣌ީɼॴ༗తૢ࡞౎။㠡ॅɻ • ୞༗Ұछૢ࡞ෆ။ɼܥ౷㚎ݐతɻ૾ੋ Home 伴ɻ

Slide 66

Slide 66 text

Safe Area @johnlinvc ҝॄኄ Home 伴័ੋ༗༻ʁ • ཧ࿦্ɼᙛఔࣜ㠡ࡏ run loop தత࣌ީɼੋᔒ㭎๏઀Ꮕᨀ߇ࣄ݅తɻ • طવᔒ㭎๏઀Ꮕࣄ݅ɼ޲্׈తख੎ጯ֘ᔒ༗೚Կ࡞༻࠽ሣʁ

Slide 67

Slide 67 text

Safe Area @johnlinvc ిᡵՊላܯࠂ ిᡵՊላ ࠷৽తᐽՍ ೈᱪ޻ఔࢣ 


Slide 68

Slide 68 text

Safe Area @johnlinvc Darwin-XNU macOS & iOS ౳౳࢖༻తఈ ૚֩৺ Mach ੋඍ֩৺ BSD ఏڙ POSIX & Unix API

Slide 69

Slide 69 text

Safe Area @johnlinvc ෼࣌ܥ౷ • iPhone 12 ༗࿡ݸ֩৺ɼୠੋզ၇ჟՄҎಉ࣌䋯্ඦݸ DispatchQueue/Threadɻ • ҼҝҰݸ֩৺্ՄҎಁա෼࣌ܥ౷䋯௒աҰݸthreadɻ

Slide 70

Slide 70 text

Safe Area @johnlinvc ෼࣌ܥ౷ Thread

Slide 71

Slide 71 text

Safe Area @johnlinvc Context Switch • ೺໨લఔࣜతهԱᱪ࿨࢑ଘثత㚎༰
 ه㑚ىိɻ • ೺ԼҰݸఔࣜతهԱᱪ࿨࢑ଘثత㚎༰
 ኺه㑚ཫճ෴ɻ • ೺ PC (Program Counterʣࢦ޲ԼҰݸఔࣜɼ
 ໵बੋ೺߇੍ᒟަڅԼҰݸఔࣜɻ Thread

Slide 72

Slide 72 text

Safe Area @johnlinvc Context Switch • ࡞ۀܥ౷ཁዎኄ೺߇੍ᒟ፤ճိʁ • ߹࡞ࣜ੾׵ɿࡏಛఆ࡞ۀ࣌੾׵ • ඇ߹࡞ࣜ੾׵ɿ࡞ۀܥ౷ܾఆ Thread

Slide 73

Slide 73 text

Safe Area @johnlinvc Context Switch • ࡞ۀܥ౷ཁዎኄ೺߇੍ᒟ፤ճိʁ • ߹࡞ࣜ੾׵ɿࡏಛఆ࡞ۀ࣌੾׵ • ඇ߹࡞ࣜ੾׵ɿ࡞ۀܥ౷ܾఆ Thread

Slide 74

Slide 74 text

Safe Area @johnlinvc ߹࡞ࣜ੾׵ • ᙛఔࣜࣥߦ system call ࣌ ( IO, ݐཱ Threadʣ။೺߇੍ᒟަؐڅ࡞ۀ ܥ౷ɼṜݸ࣌ީब༗ػ။၏੾׵ɻ • ᙛఔࣜࣥߦඇ๏ࢦྩ࣌ (1/0, ᩇෆ߹๏తهԱᱪҐஔʣ။ᨀᚙ trapɼṜ ࣌ީܥ౷໵။औಘ߇੍ᒟɼ໵༗ػ။၏੾׵ɻ

Slide 75

Slide 75 text

Safe Area @johnlinvc ߹࡞ࣜ੾׵త໰୊ • ೗ՌఔࣜӬԕෆݺڣsystem call ɻ૾ੋԼ໘Ṝᒬɼब။Ӭԕᔒ㭎๏੾ ׵ɻ • for true { 1+1} • MacOS 9 Ҏલੋ࢖༻߹࡞ࣜ੾׵ɼॴҎᄸҰఔࣜ༗Մೳ㠡ॅ੔ݸܥ౷

Slide 76

Slide 76 text

Safe Area @johnlinvc Run loop ੋҰछ߹࡞ࣜ੾׵ • 㑌Ұ࣍త loop ౎ཁ౳ Event Handler ႔ཧ׬࠽။ਐԼҰݸ loopɻ • Dispatch ཁ౳ݱࡏత task ႔ཧ׬࠽။ަग़߇੍ᒟɻ • ॴҎ༗೚ԿҰݸ Event/Task ႔ཧଠٱɼ App ब။㠡ॅɻ

Slide 77

Slide 77 text

Safe Area @johnlinvc Context Switch • ࡞ۀܥ౷ཁዎኄ೺߇੍ᒟ፤ճိʁ • ߹࡞ࣜ੾׵ɿࡏಛఆ࡞ۀ࣌੾׵ • ඇ߹࡞ࣜ੾׵ɿ࡞ۀܥ౷ܾఆ Thread

Slide 78

Slide 78 text

Safe Area @johnlinvc ඇ߹࡞ࣜ੾׵ • ܥ౷ཁ೺߇੍ᒟަڅԼҰݸ࣌ɼ။ઃఆҰݸߗᱪܭ࣌ثɻ • ܭ࣌ث࣌ؒ౸ޙ။ᨀᚙҰݸTrapɼ೺߇੍ᒟڧ੍ަڅܥ౷ɻ • ೗Ռ࣌ؒ౸લबަճ߇੍ᒟత࿩ɼबॏஔܭ࣌ثɻ

Slide 79

Slide 79 text

Safe Area @johnlinvc 0x8BADF00D • ೗Ռ༗ఔࣜաྃ኷ٱ౎ᔒ༗ਐలɻ • Darwin ။⬏ಈ WatchDog Timerɻ೺ಹݸఔࣜऴࢭɻ • ࡨޡ୅ᛰबੋ 0x8BADF00D, ate bad foodɻ

Slide 80

Slide 80 text

Safe Area @johnlinvc Darwin-XNU ࢖༻ඇ߹࡞ࣜ੾׵ • ᙛᄸҰఔࣜ㠡ॅత࣌ީɼෆ။Өڹଖଞఔࣜɻ • ᙛ App 㠡ॅత࣌ީɼ SpringBoard ෆ။ඃӨڹɼॴҎ Home ؐੋՄҎ ਖ਼ৗӡ࡞ɻ

Slide 81

Slide 81 text

Safe Area @johnlinvc ᩋ Run loop ༻ඇ߹࡞੾׵? • ઃఆ㑌ݸ loop ՄҎ༻ိ႔ཧ Event త࣌ؒɻᙛ࣌ؒ౸త࣌ީबڧ੍ަ ग़߇੍ᒟɻ • ԼҰݸ loop ࠶៺᠃߶߶ᔒ၏׬తࣄɻ

Slide 82

Slide 82 text

Safe Area @johnlinvc Bringing Theory Into Practice: A Userspace Library for Multicore Real-Time Scheduling • ࡏ Linux త Userspace ্ࣥߦత noncooperative schedulerɻ • ՄҎࡏ࢖༻ऀతఔࣜ㚎໛ٖ OS త੾׵ɻ • ໵बੋ㘸ɼՄҎᩋ UI ෆ။㠡ॅɻ

Slide 83

Slide 83 text

Safe Area @johnlinvc Մೳతመ࡞ํ๏ • ಛ੡త Combine Scheduler ɼᙛ࣌ؒ౸बఀࢭɼԼҰݸ loop ࣗಈॏ ࢼɻ • Swift main branch መᱛதత Async/Await + Actorɼᙛᔒ༗ڞڗهԱᱪ ࣌ɼtask बՄҎॏࢼ׌ᔒ༗ෆ૝ཁత෭࡞༻ɻ

Slide 84

Slide 84 text

Safe Area @johnlinvc run loop ඇ߹࡞੾׵త᠍ᴍ • ᔒሜ޷త࿩ɼՄೳ။༗ଟ࣍త෭࡞༻ɼ૾ੋ print 䋯ྃၷ࣍ɻ • ᙘ໘Մೳ။༗ෆ׬੔తߋ৽ɻҼҝߋ৽౸Ұ൒बඃதᏗྃɻ

Slide 85

Slide 85 text

Safe Area @johnlinvc UIKit SwiftUI ඇ߹࡞ࣜ 
 run loop ༏ᴍ ࠷੒ख़ ՄҎ೺ॴ༗తࣄ౎ Ҡ౸ଖଞ Thread ሜग़ိతAppҰఆෆ ။㠡㠡 ᠍ᴍ ࠷೉ሜग़ෆ။㠡㠡 తApp ؐෆ੒ख़ ᙘ໘Մೳߋ৽ෆ׬શ ޷૾ؐᔒ༗ਓ၏

Slide 86

Slide 86 text

Safe Area @johnlinvc ॄኄੋ App 㠡㠡 ? • ᙘ໘తߋ৽ස཰௿ԙ 76Hz • ׈ಈ௒ա 11 ms ᔒ༗ճᰶ • ᴍ㐝௒ա 69 ms ᔒ༗ճᰶ

Slide 87

Slide 87 text

Safe Area @johnlinvc App 㠡㠡త • Run loop తҰݸ loop 䋯ྃଠٱɻ䇪౸ྃԼҰݸ loopɻ • ᔒ㭎๏ߋ৽ᙘ໘ɻ • ᔒ㭎๏઀Ꮕ༌ೖɻ

Slide 88

Slide 88 text

Safe Area @johnlinvc App 㠡㠡త႔ཧํ๏ • ॖ୹ӡࢉ࣌ؒɼ࢖༻շऔɼCell Reuseɻ • ࢖༻ GCD, Combine ိ೺ࣄ৘Ҡ౸ run loop ֎ࣥߦɻ

Slide 89

Slide 89 text

Safe Area @johnlinvc ະိల๬ • Async / Await ՄҎᩋզ၇ߋ༰қ೺ࣄ৘Ҡ౸ଖଞ Thread ႔ཧɻ • 㘸ෆఆՄҎࡏ App 㚎၏ඇ߹࡞ࣜ schedulingɼ༗ڵझతՄҎ౳౳ိҰ ىݚڀݚڀɻ

Slide 90

Slide 90 text

Safe Area @johnlinvc References • https://stackoverflow.com/questions/18738453/how-does-the-compiler- know-a-button-has-been-pressed/18739381 • https://www.objc.io/issues/3-views/moving-pixels-onto-the-screen/ • https://zonble.gitbooks.io/kkbox-ios-dev/content/responder/run_loop.html • http://pages.cs.wisc.edu/~remzi/OSTEP/ • https://yuriktech.com/2020/03/07/User-Space-Scheduling/ • Apple Developer Documentation

Slide 91

Slide 91 text

Safe Area @johnlinvc References • https://semianalysis.com/apples-a14-packs-134-million-transistors- mm2-but-falls-far-short-of-tsmcs-density-claims/ • https://ckitakishi.com/2016/08/17/WatchDog- %E6%9C%BA%E5%88%B6/

Slide 92

Slide 92 text

Safe Area @johnlinvc Q&A • ౤ӨยతҐஔࡏ https://bit.ly/3n4rZO4 • John Lin
 Twitter: @johnlinvc • ᓣܴိ Swift Taipei ෼ڗ҃ᡅᡅ