Junior
Kaip pradėti srautą iOS?
sobes.tech AI
Atsakymas iš AI
iOS'eje galima paleisti gijas keliais būdais:
-
Naudojant
Thread:- Žemiausio lygio būdas, tiesiogiai dirbantis su operacinės sistemos gijomis.
- Reikalauja rankinio gyvavimo ciklo valdymo.
// Pavyzdys naudojant `Thread` let myThread = Thread { // Kodas, vykdomas naujoje gijoje print("Gija paleista: \(Thread.current)") } myThread.start() // paleisti giją -
Naudojant
OperationQueue:- Aukštesnio lygio abstrakcija virš gijų. Leidžia organizuoti operacijas ir valdyti jų priklausomybes.
- Gijos automatiškai valdomos.
// Pavyzdys naudojant `OperationQueue` let operationQueue = OperationQueue() operationQueue.addOperation { // Kodas, vykdomas fone print("Operacija įvykdyta `OperationQueue`: \(Thread.current)") } -
Naudojant Grand Central Dispatch (GCD):
- Galingas, paprastas naudoti mechanizmas asinchroniniam ir lygiagretusiam darbui.
- Dirba su eilėmis (queues), o ne tiesioginėmis gijomis. Sistema pati valdo gijų pool'ą.
// Pavyzdys naudojant GCD foninei eilutei DispatchQueue.global(qos: .userInitiated).async { // Kodo vykdymas fone print("GCD atliko užduotį fone: \(Thread.current)") // Kodo vykdymas pagrindinėje gijoje (UI thread) DispatchQueue.main.async { // UI atnaujinimo kodas print("GCD atliko užduotį pagrindinėje gijoje: \(Thread.current)") } } -
Naudojant
Task(konkurencijos kontekste):- Šiuolaikiškas būdas vykdyti asinchroninį kodą, pristatytas Swift 5.5.
- Leidžia lengvai rašyti asinchroninį kodą naudojant
async/await.
// Pavyzdys naudojant `Task` Task { // Kodas, vykdomas asinchroniškai print("Task įvykdytas asinchroniškai: \(Thread.current)") }
Pasirinkimas priklauso nuo konkrečios užduoties. Daugeliu atvejų rekomenduojama naudoti GCD arba Task, nes jie yra patogūs ir automatiškai valdo išteklius. OperationQueue tinka sudėtingesniems scenarijams su priklausomybėmis. Thread dažniausiai naudojamas retais atvejais, kai reikalinga visiška kontrolė nad gija.