Intern
Kuo skiriasi Greetings 1 ir Greetings 3?
sobes.tech AI
Atsakymas iš AI
Pagrindinis skirtumas yra darbo su eilėmis būdas.
Greetings 1 (sinchroninis):
- Naudoja sinchronines eilutes (
DispatchQueue). - Atlikus užduotį sinchroninėje eilėje, dabartinis srautas yra blokuojamas iki užduoties pabaigos.
Greetings 3 (asinchroninis):
- Naudoja asinchronines eilutes (
DispatchQueue). - Atlikus užduotį asinchroninėje eilėje, dabartinis srautas nėra blokuojamas ir gali tęsti darbą. Užduotis vykdoma kitame sraute iš srautų baseino.
Štai pagrindiniai skirtumai lentelėje:
| Savybė | Greetings 1 (Sinchroninis) | Greetings 3 (Asinchroninis) |
|---|---|---|
| Eilės tipas | Sinchroninė (DispatchQueue) |
Asinchroninė (DispatchQueue) |
| Srauto darbas | Dabartinis srautas yra blokuojamas | Dabartinis srautas nėra blokuojamas |
| Vykdymo srautai | Užduotis vykdoma tame pačiame sraute | Užduotis vykdoma foniniame sraute |
| Naudojimas | Paprastos sekveninės operacijos | Operacijos, kurios neturi blokuoti UI |
Pavyzdinis kodas (abstraktus, demonstruoja koncepciją):
// Greetings 1
let syncQueue = DispatchQueue(label: "com.example.sync")
syncQueue.sync {
// Ilga užduotis
print("Greetings 1: Ilga užduotis baigta") // Šis spausdinimas įvyks po užduoties pabaigos
}
print("Greetings 1: Srautas tęsiasi po sync") // Šis spausdinimas įvyks po užduoties pabaigos
// Greetings 3
let asyncQueue = DispatchQueue(label: "com.example.async")
asyncQueue.async {
// Ilga užduotis
print("Greetings 3: Ilga užduotis baigta") // Šis spausdinimas gali įvykti vėliau
}
print("Greetings 3: Srautas tęsiasi iš karto po async") // Šis spausdinimas įvyks iš karto
Pasirinkimas tarp sinchroninio ir asinchroninio vykdymo priklauso nuo to, ar reikia blokuoti dabartinį srautą, ar leisti jam tęsti darbą, kol foninė užduotis vyksta. iOS kūrime dažnai naudojama asinchroninė vykdymas ilgalaikėms operacijoms (pvz., tinklo užklausoms, duomenų apdorojimui), kad nebūtų blokuojamas pagrindinis srautas ir nebūtų užšaldytas vartotojo sąsaja.