Sobes.tech
Middle

Ko'rinishlar qanday saqlanadi, ular havola turi bo'lsa?

sobes.tech AI

AIdan javob

iOS-da (UIView va uning subklasslari) ko'rinishlar sinflardir, ya'ni, murojaat turidir. Ular uchun murojaatlarni saqlash quyidagi mexanizmlar yordamida amalga oshiriladi:

  1. Kuchli murojaatlar (Strong References):

    • Standart holatda, agar siz UIView uchun xususiyatni weak yoki unowned belgilovchisiz e'lon qilsangiz, bu kuchli murojaatni yaratadi.
    • Kuchli murojaat ob'ektning murojaatlar sonini oshiradi. Ob'ekt, unga kamida bitta kuchli murojaat mavjud bo'lsa, xotiradan o'chirilmaydi.
    • Bu, ko'rinishlar xotirada qolishi va ularga kirish mumkin bo'lishi uchun kerak bo'lsa, saqlashning standart usulidir.
    //Kuchli murojaat
    var myView: UIView = UIView()
    
  2. Zaif murojaatlar (Weak References):

    • weak kalit so'zi yordamida e'lon qilinadi.
    • Zaif murojaat ob'ektning murojaatlar sonini o'stirmaydi.
    • Zaif murojaatlar, agar kuchli murojaatlar qolmasa, ob'ektni xotiradan o'chirishni to'xtatmaydi.
    • Ular kuchli murojaat aylanishlarini oldini olish uchun ishlatiladi, odatiy holatda ota-ona-bola munosabatida, ota-ona kuchli murojaat bilan bolaga bog'langan va bola ba'zan ota-onaga murojaat qilishi mumkin. Bu holatda, ota-onaga bo'lgan teskari murojaat zaif bo'lishi kerak.
    • Zaif murojaatlar majburiy ravishda Optional bo'lishi kerak, chunki ob'ekt o'chirilishi mumkin va murojaat nil bo'ladi.
    weak var parentView: UIView?
    
  3. Unowned murojaatlar:

    • unowned kalit so'zi yordamida e'lon qilinadi.
    • Kuchli murojaatlar kabi, ular ob'ektning murojaatlar sonini oshirmaydi.
    • Farqi: zaif murojaatlardan farqli o'laroq, unowned murojaatlar majburiy ravishda Optional emas. Ular, ob'ekt kamida murojaat qilinadigan ob'ekt bilan birga yashaydi deb taxmin qilinadi. Ob'ektga unowned murojaat orqali kirishga urinish, ob'ekt o'chirilganidan so'ng, xatolik (crash) bilan yakunlanadi.
    • Ular, murojaatning hayot aylanishi, unga murojaat qiladigan ob'ektning hayot aylanishidan oshmasligiga ishonch bo'lsa, ishlatiladi. Ko'rinishlar kontekstida, bu weak ga qaraganda kamroq keng tarqalgan.
    //Ko'proq kam uchraydigan, lekin mumkin
    unowned var childView: UIView
    
  4. Massivlar va Kolleksiyalar:

    • Ko'rinishlarga murojaatlarni massivlar (Array), lug'atlar (Dictionary) yoki to'plamlarda (Set) saqlash ham, odatda, elementlarga kuchli murojaatlarni yaratadi.
    var subviews: [UIView] = []
    

Tanlov, kuchli, zaif yoki unowned murojaat o'rtasida, foydalanish holatiga va ob'ektlarning hayot aylanishini boshqarishga bog'liq bo'lib, xotira oqiblarini oldini oladi. SwiftUI kontekstida, ko'rinishlarning hayot aylanishini boshqarish konseptlari biroz boshqacha, lekin UIKit doirasida, bu mexanizmlar murojaatlarni saqlashning asosiy usuli bo'lib qoladi.