Middle
Bağlantı türü olan görünümler nasıl saklanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
iOS'taki görünümler (UIView ve alt sınıfları) sınıflardır, yani referans tipleridir. Onlara referansların depolanması aşağıdaki mekanizmalar kullanılarak yapılır:
-
Güçlü Referanslar (Strong References):
- Varsayılan olarak,
weakveyaunownedbelirteci olmadan UIView için bir özellik bildirirseniz, bu güçlü bir referans oluşturur. - Güçlü bir referans, nesnenin referans sayacını artırır. Nesne, üzerinde en az bir güçlü referans kaldığı sürece bellekten silinmez.
- Bu, görünümlerin bellekte kalmasını ve erişilebilir olmasını istediğinizde kullanılan standart depolama yöntemidir.
//Güçlü Referans var myView: UIView = UIView() - Varsayılan olarak,
-
Zayıf Referanslar (Weak References):
weakanahtar kelimesi kullanılarak bildirilir.- Zayıf bir referans nesnenin referans sayacını artırmaz.
- Zayıf referanslar, nesne üzerinde güçlü referanslar kalmadığı sürece, nesnenin bellekten silinmesini engellemez.
- Güçlü referans döngülerini önlemek için kullanılır, tipik durum ebeveyn-çocuk ilişkisidir, burada ebeveyn güçlü bir referansla çocuğa bağlanır ve çocuk bazen ebeveyne referans tutar. Bu durumda, ebeveyne olan ters referans zayıf olmalıdır.
- Zayıf referanslar zorunludur (
Optional), çünkü nesne silinebilir ve referansnilolur.
weak var parentView: UIView? -
Unowned Referanslar:
unownedanahtar kelimesi kullanılarak bildirilir.- Güçlü referanslar gibi, nesnenin referans sayacını artırmaz.
- Fark: Güçlü referansların aksine, unowned referanslar opsiyonel değildir. Nesnenin yaşam döngüsünün, referansın yaşam döngüsünden uzun olacağı varsayılır. Nesneye erişim, nesne yaşam döngüsü sona erdikten sonra yapılırsa, uygulama çökebilir.
- Bu, referansın yaşam döngüsünün, işaret ettiği nesnenin yaşam döngüsünü aşmadığından emin olduğunuz durumlarda kullanılır. Görünümler bağlamında, bu
weakkadar yaygın değildir.
//Görünümler için daha az tipik, ama mümkün unowned var childView: UIView -
Diziler ve Koleksiyonlar:
- Görünümlere referansların dizilerde (
Array), sözlüklerde (Dictionary) veya kümelerde (Set) depolanması da varsayılan olarak koleksiyon öğelerine güçlü referanslar oluşturur.
var subviews: [UIView] = [] - Görünümlere referansların dizilerde (
Güçlü, zayıf veya unowned referanslar arasındaki seçim, kullanım senaryosuna ve nesnelerin yaşam döngüsünün yönetimine bağlıdır, böylece bellek sızıntıları önlenir. SwiftUI'da, görünümlerin yaşam döngüsü yönetimi farklıdır, ancak UIKit bağlamında bu mekanizmalar referansların depolanmasının temel yoludur.