Sobes.tech
Junior — Middle

Bellek yönetiminde unowned yerine weak kullanmak hangi durumlarda tercih edilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te weak ve unowned, güçlü referans döngülerini önlemek için kullanılır, ancak farklı durumlarda uygulanır:

  • weak, referans ettiği nesne serbest bırakıldığında otomatik olarak nil olan opsiyonel bir referanstır. Bir nesne yaşamı boyunca nil olabilecek durumda olan referanslar için kullanılır.

  • unowned, opsiyonel olmayan bir referanstır ve referans ettiği nesnenin her zaman var olacağını varsayar. Nesne serbest bırakılırsa, unowned'a erişim çalışma zamanında hata verir.

unowned kullanımı tercih edilirken:

  • Referans her zaman var olan bir nesneye işaret etmeli (örneğin, çocuktan daha uzun yaşayan bir ebeveyn nesnesi).
  • Referans edilen nesnenin yaşam süresinin, referansın yaşam süresinden daha kısa olmayacağından emin olunmalı.

Örnek:

class Customer {
    let name: String
    var card: CreditCard?
    init(name: String) {
        self.name = name
    }
}

class CreditCard {
    let number: UInt64
    unowned let customer: Customer
    init(number: UInt64, customer: Customer) {
        self.number = number
        self.customer = customer
    }
}

let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)

Burada, CreditCard'ın Customer'a unowned referansı vardır çünkü kart, müşteri olmadan var olamaz ve müşteri, karttan daha uzun süre yaşar.