Sobes.tech
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.