Swift'te referanslar tanımlarken 'unowned' ve 'strong' anahtar kelimelerinin kullanımı arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te strong ve unowned anahtar kelimeleri, referansları yönetmek ve retain cycle'ları önlemek için kullanılır.
-
strong — bu, nesnenin referans sayacını artıran standart güçlü bir referanstır. En az bir güçlü referans olduğu sürece, nesne bellekten silinmez.
-
unowned — zayıf, ancak opsiyonel olmayan bir referanstır. Referans sayacını artırmaz, ancak bu referansın kullanıldığı süre boyunca referans verilen nesnenin her zaman var olduğunu varsayar. Nesne zaten silinmişse,
unownedreferansa erişmek çalışma zamanında hata verir.
Örnek:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Burada, tenant unowned olarak ilan edilmiştir çünkü daire, kişiyi güçlü bir referansla tutmamalıdır, böylece döngü önlenir, ancak kişinin daireden daha uzun süre var olduğu varsayılır.