İçeriğe geç

Swift ile Unowned Veriables

swift

Merhabalar bu yazımda Swift veriables serisinden Unowned veriables için örnek vereceğim.

Strong,Lazy,Weak‘den sonra diğer bir değişken türü olan Unowned iç içe bir birini çağıran ve bilgi aktaran sınıf değişkeni olarak kullanılır. Bu formata uyan bir sınıf yapınız yoksa kullanmanız pekte gerekli değil. Ancak dediğim şekle uygun sınıfların hafızadan temizlenme işlemi için performans eki sağlamış olur. Düzgün bir referance cycle yaratmış oluruz.

Bu değişken türlerinin hepsi ARC sistemi ile ilgilidir ve ram‘den gerekli boşaltma işlemleri için durumlara göre kolaylık sağlaması sağlanmıştır.

Aşağıdaki verdiğim sınıf örneğini inceleyebilirsiniz.

class Human {
    
    var name:String
    var gender:String
    var age:Int
    var a:A?
    
    init(name:String,gender:String,age:Int) {
        self.name = name
        self.gender = gender
        self.age = age
    }
    
    
    var ageController:Bool {
        get {
            return age > 18 ? true : false
        }
    }
    
    deinit {
        print("deinit Human")
    }
    
}

class A {
    
    unowned let human:Human
    // var human:Human
    
    var id:Int
    
    init(id:Int,human:Human) {
        self.human = human
        self.id = id
    }
    
    deinit {
        print("deinit A")
    }
    
}


var kenan:Human? = Human(name: "Kenan", gender: "Male", age: 21)

kenan!.a = A(id: 23131, human: kenan!)

kenan!.a?.id // 23131

kenan?.a?.human.age // 21

kenan = nil // deinit A , deinit Human

Yukarda gördüğünüz gibi bir biri türünden değişkenler tutan sınıflar var. Bu sınıfların oluşturulduğu andan itibaren referans sayıları artmakta 0 lanınca hafızadan boşalma işlemi gerçekleşmekte bunun içinde nil‘e eşitlenmeli.

Eğer normal Strong yapıda kullanmış olsaydık yani var human:Human şeklinde ozaman hiç bir şekilde referans 0’lama işlemi her 2 sınıf içinde gerçekleşmeyecekti. Değeri nil’e eşitlemiş olsak bile. Ancak unowned ön ekini kullandığımızda 2 sınıf içinde referans 0’lama işlemi gerçekleşmiş olur.

 

Tarih:Swift

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca