Yakalama listeleri — weak/unowned ve değer yakalama
Closure'ların başvuruları ve değerleri nasıl yakaladığını denetlemek için yakalama listelerini kullanın: [weak self], unowned ve saklama döngülerini ve ince hataları önleyen değer anlık görüntüleri.
Yakalama listeleri — weak/unowned ve değer yakalama, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 2. 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 3 dersten oluşur.
Yakalama listeleri neden kullanılır?
Amaç: Bir closure'ın neyi ve nasıl yakaladığını denetlemek. Saklama döngülerini önlemek için [zayıf self] veya sahipsiz kullanın; gerektiğinde değer anlık görüntülerini yakalayın.
Güçlü yakalama = döngü riski
Kaçan veya saklanan closure'lar yakalanan değerleri tutar. Burada self'i güçlü biçimde yakalamak bir saklama döngüsü oluşturabilir.
class Owner {
var name = "Owner"
var onDone: (() -> Void)?
func start() {
// Strong capture of self can cause a cycle if onDone is stored:
onDone = {
print("Done by", self.name) // self captured strongly
}
}
}
var o: Owner? = Owner()
o?.start()
// If nothing nils onDone or o, both can keep each other alive.Zayıf yakalama kalıbı
Döngüyü kırmak için [zayıf self] kullanın. İçeride self isteğe bağlıdır; guard yapısıyla açın veya isteğe bağlı zincirleme kullanın.
class Owner2 {
var name = "Owner2"
var onDone: (() -> Void)?
func start() {
onDone = { [weak self] in
guard let self = self else { return } // safely unwrap optional self
print("Done by", self.name)
}
}
}
let o2 = Owner2()
o2.start()
o2.onDone?()Sahipsiz (dikkatli kullanın)
Sahipsiz, self'in closure'dan daha uzun yaşayacağını varsayar (isteğe bağlı değildir). Yalnızca çağrı anında nil olamayacağından eminseniz kullanın.
class Owner3 {
var onDone: (() -> Void)?
func work() {
onDone = { [unowned self] in
// self must be alive when this runs; otherwise crash
print("Owner3 still alive")
}
}
}
let o3 = Owner3()
o3.work()
o3.onDone?()Değer anlık görüntüsü fikri
Yakalama listeleri değerlerin anlık görüntüsünü alabilir (örneğin [n = count]). Liste olmadan da içerideki değişmez sabitler oluşturuldukları anda yakalanır.
var count = 0
let makeLogger: () -> () -> Void = {
let snapshot = count // captured by value at creation
return {
print("snapshot =", snapshot, "current =", count)
}
}
count = 10
let logger = makeLogger()
count = 20
logger() // snapshot = 10, current = 20Yakalama listesiyle değer bağlama
Closure oluşturulurken adlandırılmış bir değer anlık görüntüsü oluşturmak için yakalama listesi kullanın (örneğin [initial = total]).
var total = 5
let closure = { [initial = total] in
print("initial:", initial, " now:", total)
}
total = 9
closure() // initial uses captured value 5Zayıf self nedeni
Hızlı kontrol: Saklanan veya kaçan bir closure'a neden [weak self] eklenir?
Özet
Özet: Döngüleri kırmak için [zayıf self] kullanın (self isteğe bağlı hale gelir), yalnızca yaşam süresi garanti edildiğinde sahipsiz kullanın ve yakalama listesi bağlamalarıyla değer anlık görüntülerini yakalayın.
Sıkça Sorulan Sorular
“Yakalama listeleri — weak/unowned ve değer yakalama” dersi ücretsiz mi?
Evet — “Yakalama listeleri — weak/unowned ve değer yakalama” 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 3 dersten oluşur.
“Yakalama listeleri — weak/unowned ve değer yakalama” dersinde ne öğreneceğim?
Closure'ların başvuruları ve değerleri nasıl yakaladığını denetlemek için yakalama listelerini kullanın: [weak self], unowned ve saklama döngülerini ve ince hataları önleyen değer anlık görüntüleri. 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, 3 dersinin 2. dersidir.
“Yakalama listeleri — weak/unowned ve değer yakalama” 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
- Closure'lar ve yakalama temelleri
- Yakalama listeleri — weak/unowned ve değer yakalama
- Escaping ve non-escaping, autoclosure'lar