Зәгип жана күчтүү шилтемелердин айырмасы эмнеде?
sobes.tech AI
AIден жооп
Эске алуу механизминин айырмасы (ARC - Автоматтык шилтеме эсептөө):
-
Күчтүү шилтеме (Strong reference): объекттин шилтемелер санын 1ге көтөрөт. Объект бошотулушу үчүн, анын үстүндө кеминде бир күчтүү шилтеме болушу керек. Бул Swiftте өзгөчөлүк жана өзгөрмөлөр үчүн стандарттуу жүрүм-турум:
-
Слаб шилтеме (Weak reference): объекттин шилтемелер санын көтөрбөйт. Цикл шилтемелерди алдын алуу үчүн колдонулат, мисалы, эки же андан көп объект бири-бирине күчтүү шилтемелерди түзгөндө, бул эс тутумдун агып кетишине алып келет. Слаб шилтемелер ар дайым
Optionalболуп саналат, анткени шилтемелүү объект кез келген учурда жокко чыгышы мүмкүн. Эгер объект жокко чыгарылса, слаб шилтеме автоматтык түрдөnilболот:
Цикл шилтемени алдын алуу үчүн слаб шилтемени колдонуу мисалы:
class Person {
let name: String
var apartment: Apartment? // башта күчтүү шилтеме
init(name: String) { self.name = name }
deinit { print("\(name) жокко чыгарылды") }
}
class Apartment {
let unit: String
weak var tenant: Person? // слаб шилтеме
init(unit: String) { self.unit = unit }
deinit { print("Бөлмө \(unit) жокко чыгарылды") }
}
var john: Person? // Person объекти
var unit4A: Apartment? // Apartment объекти
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
// Цикл шилтемени түзүү:
// john күчтүү шилтеме менен квартирага ээ
// квартира күчтүү шилтеме менен адамга ээ
john!.apartment = unit4A
unit4A!.tenant = john // бул слаб болушу керек, циклди алдын алуу үчүн
john = nil // john-ду nil кылуу аны жок кылбайт, эгер цикл болсо
unit4A = nil // ошол эле, цикл болсо, жок кылбайт
// Күтүлгөн чыгуу:
// John Appleseed жокко чыгарылды
// Бөлмө 4A жокко чыгарылды
weak колдонбосо, деструкторлор чакырылбайт, бул эс тутумдун агып кетишин көрсөтөт.