Sobes.tech
Middle

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.