Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan · Pelajaran

Grand Central Dispatch (GCD)

Laksanakan operasi serentak menggunakan Grand Central Dispatch untuk meningkatkan responsif dan prestasi aplikasi.

Pelajaran 2 daripada 411 langkah

Grand Central Dispatch (GCD) ialah pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.

Memastikan Aplikasi Terus Responsif

Pernahkah anda menggunakan aplikasi yang terhenti apabila memuatkan data? Hal ini sering berlaku kerana benang utama disekat.

Benang utama ialah tempat semua kemas kini UI dan interaksi pengguna berlaku. Jika anda menjalankan tugasan yang mengambil masa lama di situ, aplikasi anda menjadi tidak responsif.

Keserentakan bermaksud menjalankan beberapa tugasan seolah-olah pada masa yang sama. Ini membebaskan benang utama dan memastikan pengalaman pengguna yang lancar.

Kenali GCD

Grand Central Dispatch (GCD) ialah API aras rendah Apple yang berkuasa untuk mengurus operasi serentak. Ia dibina berasaskan C dan blok, serta memudahkan pelaksanaan tugasan secara tak segerak.

GCD membantu anda menjalankan kod secara serentak dengan mengurus baris gilir penghantaran. Anda memberitahu GCD tugasan yang perlu dijalankan, kemudian GCD menentukan masa dan cara melaksanakannya pada teras pemproses yang tersedia.

Memahami Baris Gilir Penghantaran

GCD menggunakan baris gilir penghantaran untuk mengurus tugasan. Anggap baris gilir sebagai barisan tugasan yang menunggu untuk dilaksanakan.

  • Baris Gilir Bersiri: Tugasan dijalankan satu demi satu mengikut susunan penambahannya. Setiap baris gilir bersiri memproses tugasan secara berurutan.
  • Baris Gilir Serentak: Tugasan dimulakan mengikut susunan penambahannya, tetapi boleh dijalankan pada masa yang sama. Susunan penyelesaiannya tidak dijamin.

Sahabat Karib UI

Setiap aplikasi iOS mempunyai baris gilir bersiri khas yang dipanggil baris gilir penghantaran utama. Di sinilah semua kemas kini UI mesti berlaku.

Jika anda cuba mengemas kini UI daripada benang latar belakang, aplikasi anda mungkin ranap atau berkelakuan di luar jangkaan. Sentiasa kembali ke baris gilir utama untuk perubahan UI.

Anda mengaksesnya menggunakan dispatch_get_main_queue().

Pembantu Latar Belakang Sistem

GCD menyediakan beberapa baris gilir serentak global yang boleh anda gunakan untuk tugasan latar belakang. Baris gilir ini diurus oleh sistem dan dioptimumkan untuk prestasi.

Baris gilir ini berbeza mengikut kelas Kualiti Perkhidmatan (QoS), yang menunjukkan keutamaan tugasan:

  • .userInteractive: Berkaitan UI, keutamaan tertinggi.
  • .userInitiated: Tugasan yang diminta pengguna.
  • .utility: Tugasan yang mengambil masa lama dan tidak mendesak.
  • .background: Penyelenggaraan, keutamaan terendah.

Kerja Latar Belakang Dipermudah

Cara paling biasa menggunakan GCD adalah dengan dispatch_async. Fungsi ini menambahkan tugasan (satu blok kod) ke baris gilir dan kembali dengan serta-merta, membolehkan kod pemanggil meneruskan pelaksanaan.

Tugasan itu kemudiannya dijalankan pada benang berasingan di latar belakang. Ini sesuai untuk operasi yang tidak perlu menyekat benang utama, seperti permintaan rangkaian atau pengiraan berat.

#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;
}

Menunggu Tugasan

Walaupun dispatch_async bagus untuk operasi yang tidak menyekat, kadangkala anda perlu menunggu tugasan selesai sebelum meneruskan. Di sinilah dispatch_sync digunakan.

dispatch_sync menambahkan tugasan ke baris gilir, kemudian menyekat benang semasa sehingga tugasan itu selesai dilaksanakan. Berhati-hati: jangan panggil dispatch_sync pada baris gilir semasa, kerana hal ini akan menyebabkan kebuntuan!

#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;
}

Kemas Kini UI yang Lancar

Pola yang biasa dalam aplikasi iOS ialah menjalankan tugasan yang mengambil masa lama di latar belakang, kemudian mengemas kini UI apabila tugasan itu selesai. Ini menghalang UI daripada terhenti.

Anda boleh melakukannya dengan menghantar tugasan latar belakang ke baris gilir serentak global, kemudian menghantar tugasan kemas kini UI ke baris gilir utama.

#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;
}

Menjadualkan Tugasan Kemudian

Kadangkala anda perlu menjadualkan tugasan supaya dijalankan selepas kelewatan tertentu. GCD menyediakan dispatch_after untuk tujuan ini.

Penting untuk diketahui bahawa dispatch_after bukan pemasa masa nyata. Ia hanya menambahkan blok ke baris gilir yang ditentukan selepas kelewatan minimum. Masa pelaksanaan tepat bergantung pada aktiviti baris gilir tersebut.

#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;
}

Semakan GCD

Mari uji pemahaman anda tentang GCD.

Ringkasan GCD

Syabas! Anda telah mempelajari asas Grand Central Dispatch.

  • GCD membantu mengurus tugasan serentak supaya aplikasi anda terus responsif.
  • Baris gilir penghantaran (bersiri dan serentak) mengawal pelaksanaan tugasan.
  • Baris gilir utama digunakan untuk kemas kini UI dan sentiasa diakses melalui dispatch_async.
  • Baris gilir serentak global digunakan untuk kerja latar belakang.
  • dispatch_async menjalankan tugasan tanpa menyekat, manakala dispatch_sync menunggu tugasan.

Menguasai GCD amat penting untuk membina aplikasi iOS yang berprestasi tinggi dan responsif.

Percuma untuk bermula

Pelajari Objective-C dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Grand Central Dispatch (GCD)” percuma?

Ya — teks penuh “Grand Central Dispatch (GCD)” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan, tingkat taraf kepada CoddyKit PRO. Kursus Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Grand Central Dispatch (GCD)”?

Laksanakan operasi serentak menggunakan Grand Central Dispatch untuk meningkatkan responsif dan prestasi aplikasi. Anda berlatih Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Grand Central Dispatch (GCD)” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan ini?

Ya. Setiap pelajaran Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. NSURLSession untuk Panggilan API
  2. Grand Central Dispatch (GCD)
  3. NSOperationQueue untuk Tugasan Kompleks
  4. Menghuraikan JSON dengan NSJSONSerialization
← Kembali ke Pembangunan Objective-C untuk Aplikasi iOS Lama dan Perusahaan