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