Junior — Middle
Zayıf (unowned) referansların kullanımıyla ilgili durumlar uygulamanın çökmesine neden olabilir mi? Bir örnek veriniz.
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, Swift'te zayıf (unowned) referansların kullanımı, referans verilen nesne zaten serbest bırakılmışsa ve daha sonra bu referansa erişilmeye çalışılırsa uygulamanın çökmesine neden olabilir.
Unowned referanslar, nesnenin her zaman var olduğunu varsayar, referans hayattayken. Eğer durum böyle değilse, uygulama "EXC_BAD_ACCESS" hatasıyla çöker.
Örnek:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)
john = nil // Person nesnesi serbest bırakılır
// Artık apartment.tenant, zaten serbest bırakılmış bir nesneye ait unowned bir referanstır
// Erişim denemesi çöküşe neden olur
print(john!.apartment!.tenant) // çöküş
Böyle hataları önlemek için, unowned referansın nesne serbest bırakıldıktan sonra kullanılmayacağından emin olunmalı veya nesne serbest bırakıldığında nil olan weak referanslar kullanılmalıdır.