Swift Academy · Ders

Ana İş Parçacığı Denetleyicisi ve Donmalar

Arka plan iş parçacıklarındaki kullanıcı arayüzü çalışmalarını tespit edin ve ana iş parçacığı donmalarını çözün.

3. ders / 413 adım

Ana İş Parçacığı Denetleyicisi ve Donmalar, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Ana İş Parçacığı Denetleyicisi

Main Thread Checker (MTC), çalışma zamanında arka plan iş parçacıklarından yapılan UIKit/AppKit API çağrılarını bildiren bir Xcode tanılama aracıdır.

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

Yaygın MTC İhlalleri

Tamamlama işleyicilerinden veya arka plan kuyruklarından kullanıcı arayüzünü güncellemek en sık görülen ihlallerdir.

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

Eşzamansızlık ve MTC

Bir sınıfı veya işlevi @MainActor ile işaretlemek, tüm yöntemlerinin ana iş parçacığında çalışmasını garanti eder.

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

Takılmalar Nedir?

Takılma, ana iş parçacığının çok uzun süre engellenmesi ve uygulamanın yanıt veremez hâle gelmesidir. iOS izleme mekanizması, başlangıçta (>20 sn) veya bir kullanıcı işleminden sonra takılan uygulamaları sonlandırır.

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

Instruments Takılmalar Şablonu

Xcode 14 ve sonraki sürümlerdeki Hangs aracı, ana iş parçacığındaki engellenmeyi tanılamak için tam yığın izleriyle takılma olaylarını kaydeder.

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

Testlerde Ana İş Parçacığı Denetleyicisi

MTC, kullanıcı arayüzü testleri sırasında da devreye girer. Otomatik kullanıcı arayüzü akışlarındaki ihlalleri yakalamak için test şemasında yapılandırın.

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

MetricKit Takılma Raporları

MetricKit, üretimdeki uygulamalardan MXHangDiagnosticPayload içinde takılma raporları toplar.

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

Takılmaları Instruments ile Algılama

Bir iz kaydedin ve Ana İş Parçacığının çalıştığı ancak görüntü bağlantısının çalışmadığı zaman aralıklarını arayın (atlanan kareler).

// 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

Yaygın Takılmalar İçin Eşzamansız Çözümler

CPU'yu yoğun kullanan işleri Task.detached ile ana iş parçacığından çıkarın veya async let kullanın.

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

Ana İş Parçacığında Eşzamanlı API'lerden Kaçınma

Eşzamanlı dosya G/Ç işlemlerini ve ağ çağrılarını eşzamansız eşdeğerleriyle değiştirin veya bunları bir arka plan kuyruğuna taşıyın.

// 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

Ana Çalıştırma Döngüsü ve Zamanlayıcılar

Ana çalıştırma döngüsündeki uzun süren işlemler ( RunLoop.main geri çağırmalarındaki işlemler) de takılmalara neden olur. Hesaplamayı ana döngünün dışına taşıyın.

// 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() }
}

Kısa Kontrol

Bir sınıfa @MainActor eklemek, yöntem çağrılarıyla ilgili neyi garanti eder?

Ders Özeti

Arka plandan yapılan kullanıcı arayüzü işlemi ihlallerini yakalamak için Hata Ayıklama şemasında Main Thread Checker'ı etkinleştirin. ViewModels ve görünümler üzerinde @MainActor kullanın. Yoğun işleri Task.detached veya arka plan kuyruklarıyla ana iş parçacığından çıkarın. Gerçek dünyadaki takılmaları tanılamak için Hangs aracını ve MetricKit'in MXHangDiagnosticPayload değerini kullanın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Swift öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
122
Dersler
409

Sıkça Sorulan Sorular

“Ana İş Parçacığı Denetleyicisi ve Donmalar” dersi ücretsiz mi?

Evet — “Ana İş Parçacığı Denetleyicisi ve Donmalar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Ana İş Parçacığı Denetleyicisi ve Donmalar” dersinde ne öğreneceğim?

Arka plan iş parçacıklarındaki kullanıcı arayüzü çalışmalarını tespit edin ve ana iş parçacığı donmalarını çözün. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Ana İş Parçacığı Denetleyicisi ve Donmalar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Instruments Temelleri: Zaman Profilleyicisi
  2. Allocations ve Leaks Instruments
  3. Ana İş Parçacığı Denetleyicisi ve Donmalar
  4. Yoğun Yolları İyileştirme: COW, Satır İçi Kullanım ve Özelleştirme
← Swift Academy Sayfasına Dön