Sobes.tech
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:

  1. Güçlü Referanslar (Strong References):

    • Varsayılan olarak, weak veya unowned belirteci 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()
    
  2. Zayıf Referanslar (Weak References):

    • weak anahtar 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 referans nil olur.
    weak var parentView: UIView?
    
  3. Unowned Referanslar:

    • unowned anahtar 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 weak kadar yaygın değildir.
    //Görünümler için daha az tipik, ama mümkün
    unowned var childView: UIView
    
  4. 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üç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.