Swift bağlamında unowned nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Unowned, Swift'teki otomatik hafıza yönetimine (ARC) atıfta bulunur. Unowned referanslar, iki nesne birbirine güçlü referanslar verdiğinde oluşabilecek döngüleri önlemek için kullanılır. Bir unowned referans, nesnenin referans sayacını artırmaz. Weak referansın aksine, unowned referansın her zaman var olan bir örneğe işaret etmesi beklenir; eğer işaret ettiği örnek serbest bırakılırsa, erişim denemesi çalışma zamanında hata ile sonuçlanır. Bu, ilişkili nesnenin yaşam döngüsünün, içeren nesnenin yaşam döngüsüyle aynı veya daha uzun olduğu durumlarda kullanılır.
Kullanım örneği:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) departmanı başlatılıyor")
}
deinit {
print("\(name) departmanı sonlandırılıyor")
}
}
class Course {
var name: String
unowned var department: Department // Unowned zayıf referans
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kurs başlatılıyor")
}
deinit {
print("\(name) kurs sonlandırılıyor")
}
}
var accounting: Department? = Department(name: "Muhasebe")
var introToAccounting: Course? = Course(name: "Muhasebeye Giriş", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // Artık Department nesnesi serbest bırakılabilir
introToAccounting = nil // Artık Course nesnesi serbest bırakılabilir
Bu örnekte, Course nesnesi Department nesnesine unowned referansla bağlıdır. Çünkü Course nesnesi, mantıksal olarak, Department olmadan var olamaz ve Department, courses dizisi aracılığıyla Course nesnesinin yaşam döngüsünü yönetir. Bu durumda unowned kullanımı uygundur. Bu, accounting ve introToAccounting arasındaki güçlü referans döngüsünü önler. accounting nil olduğunda, Department nesnesi serbest bırakılır ve ardından Course nesnesi de, ona artık güçlü referans kalmadığı için, serbest bırakılır.