Grand Central Dispatch (GCD)
Toteuttakaa samanaikaisia toimintoja Grand Central Dispatchilla sovelluksen responsiivisuuden ja suorituskyvyn parantamiseksi.
Grand Central Dispatch (GCD) on ilmainen Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssilla on yhteensä 4 oppituntia.
Sovellusten pitäminen responsiivisina
Oletteko koskaan käyttäneet sovellusta, joka jumiutui tietoja ladattaessa? Syynä on usein pääsäikeen estäminen.
Pääsäikeessä tapahtuvat kaikki käyttöliittymän päivitykset ja käyttäjän toiminnot. Jos suoritatte siellä pitkään kestävän tehtävän, sovellus ei enää vastaa.
Samanaikaisuus tarkoittaa useiden tehtävien näennäistä suorittamista yhtä aikaa. Näin pääsäie pysyy vapaana ja käyttökokemus sujuvana.
Tutustutaan GCD:hen
Grand Central Dispatch (GCD) on Applen tehokas matalan tason API samanaikaisten toimintojen hallintaan. Se perustuu C-kieleen ja lohkoihin, ja helpottaa tehtävien suorittamista asynkronisesti.
GCD:n avulla koodia voidaan suorittaa samanaikaisesti hallitsemalla dispatch-jonoja. Määritätte GCD:lle suoritettavat tehtävät, ja se päättää, milloin ja miten ne suoritetaan käytettävissä olevilla suoritinytimillä.
Dispatch-jonojen ymmärtäminen
GCD käyttää tehtävien hallintaan dispatch-jonoja. Ajatelkaa jonoa tehtävien jonona, jossa tehtävät odottavat suorittamista.
- Sarjajonot: Tehtävät suoritetaan yksi kerrallaan siinä järjestyksessä, jossa ne lisättiin. Kukin sarjajono käsittelee tehtävänsä peräkkäin.
- Samanaikaiset jonot: Tehtävät käynnistetään lisäysjärjestyksessä, mutta ne voivat suorittua yhtä aikaa. Valmistumisjärjestystä ei taata.
Käyttöliittymän paras ystävä
Jokaisessa iOS-sovelluksessa on erityinen sarjajono, jota kutsutaan päädispatch-jonoksi. Kaikki käyttöliittymän päivitykset on tehtävä tässä jonossa.
Jos yritätte päivittää käyttöliittymää taustasäikeestä, sovellus saattaa kaatua tai toimia odottamattomasti. Vaihtakaa käyttöliittymän muutoksia varten aina takaisin pääjonoon.
Siihen pääsee käsiksi käyttämällä dispatch_get_main_queue()-funktiota.
Järjestelmän tausta-apurit
GCD tarjoaa useita maailmanlaajuisia samanaikaisia jonoja, joita voitte käyttää taustatehtäviin. Järjestelmä hallitsee näitä jonoja ja optimoi ne suorituskykyä varten.
Ne eroavat toisistaan Quality of Service (QoS) -luokan perusteella. Luokka ilmaisee tehtävien prioriteetin:
.userInteractive: Käyttöliittymään liittyvät tehtävät, korkein prioriteetti..userInitiated: Käyttäjän pyytämät tehtävät..utility: Pitkäkestoiset, ei-kiireelliset tehtävät..background: Ylläpitotehtävät, matalin prioriteetti.
Taustatyö helposti
Yleisin tapa käyttää GCD:tä on dispatch_async-funktion avulla. Tämä funktio lisää tehtävän (koodilohkon) jonoon ja palauttaa heti, jolloin kutsuva koodi voi jatkaa suorittamista.
Tehtävä suoritetaan sitten erillisessä säikeessä taustalla. Tämä sopii erinomaisesti toimintoihin, joiden ei tarvitse estää pääsäiettä, kuten verkkopyyntöihin tai raskaisiin laskutoimituksiin.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"1. Program starts.");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"3. Doing some background work...");
[NSThread sleepForTimeInterval:1.0]; // Simulate work
NSLog(@"4. Background work finished.");
});
NSLog(@"2. Program continues immediately after dispatch_async.");
[NSThread sleepForTimeInterval:2.0]; // Keep main thread alive
}
return 0;
}Tehtävän valmistumisen odottaminen
Vaikka dispatch_async sopii erinomaisesti estämättömiin toimintoihin, joskus tehtävän on valmistuttava ennen jatkamista. Tällöin käytetään dispatch_sync-funktiota.
dispatch_sync lisää tehtävän jonoon ja estää nykyisen säikeen, kunnes tehtävä on suoritettu. Olkaa varovaisia: älkää koskaan kutsuko dispatch_sync-funktiota nykyisessä jonossa, koska se aiheuttaa deadlock-tilanteen!
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"1. Program starts.");
dispatch_queue_t mySerialQueue = dispatch_queue_create("com.coddykit.myserialqueue", DISPATCH_QUEUE_SERIAL);
dispatch_sync(mySerialQueue, ^{
NSLog(@"2. This synchronous task runs now.");
[NSThread sleepForTimeInterval:0.5];
});
NSLog(@"3. Program continues AFTER the synchronous task completes.");
}
return 0;
}Saumattomat käyttöliittymäpäivitykset
iOS-sovelluksissa on yleistä suorittaa pitkäkestoinen tehtävä taustalla ja päivittää käyttöliittymä sen valmistuttua. Näin käyttöliittymä ei jäädy.
Tämä onnistuu lähettämällä taustatehtävä maailmanlaajuiseen samanaikaiseen jonoon ja lähettämällä käyttöliittymän päivitystehtävä pääjonoon.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"1. App starts, fetching data...");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"2. Performing heavy data fetch on background thread...");
[NSThread sleepForTimeInterval:1.5]; // Simulate network call or heavy computation
NSString *fetchedData = @"User Data Loaded!";
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"3. Data fetched! Updating UI on main thread: %@", fetchedData);
// In a real app, you'd update a UILabel or UIImageView here.
});
});
NSLog(@"4. App remains responsive while data fetches.");
[NSThread sleepForTimeInterval:2.0]; // Keep main thread alive
}
return 0;
}Tehtävien ajoittaminen myöhemmäksi
Joskus tehtävä on ajoitettava suoritettavaksi tietyn viiveen jälkeen. GCD tarjoaa tähän tarkoitukseen dispatch_after-funktion.
On tärkeää huomata, ettei dispatch_after ole reaaliaikainen ajastin. Se yksinkertaisesti lisää lohkon määritettyyn jonoon vähimmäisviiveen jälkeen. Tarkka suoritusaika riippuu jonon aktiivisuudesta.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"1. Program starts.");
NSTimeInterval delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"2. This message appears after 2 seconds.");
});
NSLog(@"3. Program continues immediately, waiting for delayed task.");
[NSThread sleepForTimeInterval:3.0]; // Keep main thread alive
}
return 0;
}GCD-tarkistus
Testataan GCD:n ymmärtämistänne.
GCD:n yhteenveto
Hienoa työtä! Olette oppineet Grand Central Dispatchin perusteet.
- GCD auttaa hallitsemaan samanaikaisia tehtäviä, jotta sovellus pysyy responsiivisena.
- Dispatch-jonot (sarjajonot ja samanaikaiset jonot) hallitsevat tehtävien suorittamista.
- Pääjono on tarkoitettu käyttöliittymän päivityksiin, ja sitä käytetään aina
dispatch_async-funktion kautta. - Maailmanlaajuiset samanaikaiset jonot on tarkoitettu taustatyöhön.
dispatch_asyncsuorittaa tehtäviä estämättä muuta suoritusta, kun taasdispatch_syncodottaa tehtävien valmistumista.
GCD:n hallitseminen on olennaista suorituskykyisten ja responsiivisten iOS-sovellusten rakentamisessa.
Opi Objective-C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Grand Central Dispatch (GCD)” ilmainen?
Kyllä – oppitunnin ”Grand Central Dispatch (GCD)” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssin, päivitä CoddyKit PROhon. Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Grand Central Dispatch (GCD)”?
Toteuttakaa samanaikaisia toimintoja Grand Central Dispatchilla sovelluksen responsiivisuuden ja suorituskyvyn parantamiseksi. Harjoittelet Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Grand Central Dispatch (GCD)”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunnilla?
Kyllä. Jokainen Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- NSURLSession API-kutsuihin
- Grand Central Dispatch (GCD)
- NSOperationQueue monimutkaisiin tehtäviin
- JSON-jäsentäminen NSJSONSerializationilla