Zayıf ve güçlü bağlantılar arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Hafıza yönetim mekanizmasındaki (ARC - Otomatik Referans Sayımı) fark.
-
Güçlü referans (Strong reference): Nesnenin referans sayacını 1 artırır. Nesne, ona en az bir güçlü referans olduğu sürece bellekten serbest bırakılamaz. Bu davranış Swift'te varsayılan olarak özellikler ve değişkenler için geçerlidir.
-
Zayıf referans (Weak reference): Nesnenin referans sayacını artırmaz. Çevrimsel referansları önlemek için kullanılır, iki veya daha fazla nesne birbirine güçlü referanslar içerdiğinde, bu bellek sızıntısına yol açar. Zayıf referanslar her zaman opsiyoneldir (
Optional), çünkü referans aldığı nesne herhangi bir zamanda serbest bırakılabilir. Nesne serbest bırakıldığında, zayıf referans otomatik olaraknilolur.
Zayıf referans kullanımıyla çevrimsel referansın önlenmesine örnek:
class Person {
let name: String
var apartment: Apartment? // Başlangıçta güçlü referans
init(name: String) { self.name = name }
deinit { print("\(name) serbest bırakılıyor") }
}
class Apartment {
let unit: String
weak var tenant: Person? // Zayıf referans
init(unit: String) { self.unit = unit }
deinit { print("Daire \(unit) serbest bırakılıyor") }
}
var john: Person? // Person örneği
var unit4A: Apartment? // Apartment örneği
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
// Güçlü referans döngüsü oluşturma:
// john, daireye güçlü referans tutar
// daire, kişiye güçlü referans tutar
john!.apartment = unit4A
unit4A!.tenant = john // Bu zayıf olmalı, döngüyü kırmak için
john = nil // john'u nil yapmak, döngü varsa serbest bırakmaz
unit4A = nil // daireyi nil yapmak, döngü varsa serbest bırakmaz
// Zayıf referans kullanıldığında beklenen çıktı:
// John Appleseed serbest bırakılıyor
// Daire 4A serbest bırakılıyor
weak olmadan tenant için, yok ediciler çağrılmazdı, bu da bellek sızıntısına işaret eder.