Референс тиби колдонуу менен түзүлгөн объекттердин эс тутумун кантип бошотуу керек?
sobes.tech AI
AIден жооп
iOS-та, шилтемелердин түрлөрү менен түзүлгөн объекттер (мисалы, Swift же Objective-C класстары) автоматтык шилтеме эсептөө системи (ARC — Automatic Reference Counting) тарабынан башкарылат. Ар бир объект анын үстүндө активдүү шилтемелердин санын сактайт. Жаңы шилтеме түзүлгөндө, эсептөө көбөйөт, жана шилтеме колдонулбай калганда (мисалы, өзгөрмө чегинен чыгып кетсе же nilге берилсе), эсептөө азайтылат.
Объекттин шилтеме эсептөө саны нөлгө жеткенде, бул анын үстүнө эч ким шилтеме жасабай турганын билдирет, жана объекттин ээлеген эс тутуму автоматтык түрдө бошотулат. Бул эс тутум агып кетүүнүн алдын алууга жардам берет, кол менен башкарууну талап кылбай.
Swiftте мисал:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Адам \(name) бошотулду")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // шилтеме эсептөө көбөйдү
p1 = nil // эсептөө азайды, бирок объект дагы эле жашайт
p2 = nil // эсептөө 0 болду, объект бошотулду
Эки объект бири-бирине шилтеме жасаганда, эс тутумдун агып кетишин алдын алуу үчүн циклик шилтемелер (retain cycles) пайда болушу мүмкүн. Муну алдын алуу үчүн, weak же unowned шилтемелер колдонулат.