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.
Bu yazı yorumlara kapalı.