Junior — Middle
Эс тутум моделинде шилтемелерди туура уюштуруу үчүн кандай ыкмалар бар, эгерде циклдик эс тутумду кармоо болбосун?
sobes.tech AI
AIден жооп
iOS-да объект моделинде циклдик сактоо тутумун алдын алуу үчүн (Swift же Objective-C колдонуп), күчтүү (strong), алсыз (weak) жана ээ эмес (unowned) шилтемелерди туура колдонуу маанилүү.
Негизги идея:
- strong — ээлик кылган шилтеме, объекттин шилтемелер санын көбөйтөт.
- weak — ээлик кылбаган шилтеме, санын көбөйтпөйт, объект өчүрүлгөндө автоматтык түрдө nil болот.
- unowned — ээлик кылбаган шилтеме, санын көбөйтпөйт, бирок nil болбойт, объект узак жашоого кепилдик берилсе колдонулат.
Көп учурда циклдер пайда болот, мисалы, ата-эне менен бала же делегат менен объекттин ортосунда. Циклдерди алдын алуу үчүн:
- Ата-эне баланы strong аркылуу кармайт.
- Бала ата-энеге weak же unowned аркылуу шилтеме кылат.
Swiftте мисал:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // циклди алдын алуу үчүн алсыз шилтеме
}
let parent = Parent()
let child = Child()
parent.child = child
child.parent = parent
Мындай жол менен, parent жана child колдонулбай калганда, эс тутум туура бошотулат, циклдер жана эс тутум агып кетүүлөрдөн корголот.