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:
-
Kuchli murojaatlar (Strong References):
- Standart holatda, agar siz UIView uchun xususiyatni
weakyokiunownedbelgilovchisiz 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() - Standart holatda, agar siz UIView uchun xususiyatni
-
Zaif murojaatlar (Weak References):
weakkalit 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
Optionalbo'lishi kerak, chunki ob'ekt o'chirilishi mumkin va murojaatnilbo'ladi.
weak var parentView: UIView? -
Unowned murojaatlar:
unownedkalit 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
Optionalemas. 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
weakga qaraganda kamroq keng tarqalgan.
//Ko'proq kam uchraydigan, lekin mumkin unowned var childView: UIView -
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] = [] - Ko'rinishlarga murojaatlarni massivlar (
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.