Sobes.tech
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 колдонулбай калганда, эс тутум туура бошотулат, циклдер жана эс тутум агып кетүүлөрдөн корголот.