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 olaraknilolan opsiyonel bir referanstır. Bir nesne yaşamı boyuncanilolabilecek 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.