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 այլևս չեն օգտագործվում, հիշողությունը ճիշտ կերպով ազատվում է, ցիկլերից և հիշողության լափերից խուսափելով։