0Pricing
Swift Academy · Pelajaran

Pemeriksa Thread Utama dan Kemacetan

Mendeteksi pekerjaan UI pada thread latar belakang dan mengatasi kemacetan thread utama.

Pemeriksa Thread Utama dan Kemacetan adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Pemeriksa Thread Utama

Pemeriksa Thread Utama (MTC) adalah diagnostik Xcode yang melaporkan pemanggilan API UIKit/AppKit dari thread latar belakang saat runtime.

// Enabled by default in Xcode Debug scheme:
// Product → Scheme → Edit → Diagnostics → ☑ Main Thread Checker
// Violating calls log a purple runtime warning in Xcode

Pelanggaran MTC yang Umum

Memperbarui UI dari penangan penyelesaian atau antrean latar belakang merupakan pelanggaran yang paling sering terjadi.

URLSession.shared.dataTask(with: url) { data, _, _ in
  self.label.text = "Done"  // VIOLATION: background thread
}.resume()
// Fix:
DispatchQueue.main.async { self.label.text = "Done" }

MTC dengan asinkron/menunggu

Menandai class atau fungsi dengan @MainActor menjamin semua metodenya berjalan pada thread utama.

@MainActor
final class ProfileViewModel: ObservableObject {
  @Published var name = ""
  func load() async {
    name = try? await fetchName()  // always on main thread
  }
}

Apa Itu Kemacetan?

Kemacetan terjadi saat thread utama terblokir terlalu lama sehingga app tidak merespons. Pengawas iOS menghentikan app yang macet saat peluncuran (>20 dtk) atau setelah tindakan pengguna.

// Common causes:
// - Synchronous network calls on main thread
// - Heavy computation blocking main run loop
// - Deadlocks between DispatchQueues

Templat Kemacetan Instruments

Instrumen Kemacetan di Xcode 14+ merekam peristiwa kemacetan dengan jejak tumpukan lengkap untuk mendiagnosis pemblokiran thread utama.

// Instruments → Hangs template
// Shows hang duration (ms), call stack, and responsible frame
// Look for synchronous I/O or heavy loops

Pemeriksa Thread Utama dalam Pengujian

MTC juga aktif selama pengujian antarmuka pengguna. Konfigurasikan MTC dalam skema pengujian untuk menangkap pelanggaran dalam alur antarmuka pengguna otomatis.

// XCTestScheme Diagnostics → ☑ Main Thread Checker
// UI test violation = instant fail in CI

Laporan Kemacetan MetricKit

MetricKit mengumpulkan laporan kemacetan dari app produksi dalam MXHangDiagnosticPayload.

func didReceive(_ payloads: [MXDiagnosticPayload]) {
  payloads.compactMap { $0.hangDiagnostics }.flatMap { $0 }.forEach {
    print($0.callStackTree)
  }
}

Mendeteksi Kemacetan dengan Instruments

Rekam jejak dan cari interval waktu ketika Thread Utama sedang menjalankan kode, tetapi tautan tampilan tidak aktif (bingkai terlewat).

// Time Profiler: look for long CPU bursts on main thread
// Core Animation: FPS drops to 0 during hang
// Hangs instrument: highlights exact frames where hang occurred

Perbaikan Asinkron untuk Kemacetan Umum

Pindahkan pekerjaan yang membebani CPU dari thread utama menggunakan Task.detached atau async let.

// HANG:
let processed = heavyProcessing(image)  // blocks main thread
// FIX:
let processed = await Task.detached(priority: .userInitiated) {
  heavyProcessing(image)
}.value

Menghindari API Sinkron pada Thread Utama

Ganti I/O berkas dan pemanggilan jaringan sinkron dengan padanan asinkron, atau pindahkan keduanya ke antrean latar belakang.

// HANG: synchronous file read on main thread
let data = try! Data(contentsOf: largeFileURL)
// FIX:
let data = try await Task.detached { try Data(contentsOf: largeFileURL) }.value

Run Loop Utama dan Timer

Operasi berdurasi panjang pada run loop utama (dalam callback RunLoop.main) juga menyebabkan kemacetan. Pindahkan perhitungan dari run loop utama.

// AVOID: heavy work in main-thread timer callback
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
  processAllItems()  // slow!
}
// PREFER: dispatch to background
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
  Task.detached { processAllItems() }
}

Pemeriksaan Singkat

Apa yang dijamin oleh penambahan @MainActor pada class terkait pemanggilan metodenya?

Ringkasan Pelajaran

Aktifkan Pemeriksa Thread Utama dalam skema Debug untuk menangkap pelanggaran UI dari thread latar belakang. Gunakan @MainActor pada ViewModels dan tampilan. Pindahkan pekerjaan berat dari thread utama menggunakan Task.detached atau antrean latar belakang. Gunakan instrumen Kemacetan dan MetricKit MXHangDiagnosticPayload untuk mendiagnosis kemacetan di kondisi nyata.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemeriksa Thread Utama dan Kemacetan” gratis?

Ya — teks lengkap “Pemeriksa Thread Utama dan Kemacetan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemeriksa Thread Utama dan Kemacetan”?

Mendeteksi pekerjaan UI pada thread latar belakang dan mengatasi kemacetan thread utama. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pemeriksa Thread Utama dan Kemacetan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Instruments: Time Profiler
  2. Instruments Allocations dan Leaks
  3. Pemeriksa Thread Utama dan Kemacetan
  4. Mengoptimalkan Jalur Sibuk: COW, Inlining, dan Spesialisasi
← Kembali ke Swift Academy