Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է վերացնել ցիկլային հղումները հիշողության կառավարման մեջ, որպեսզի խուսափենք արտահոսքներից։

sobes.tech AI

Պատասխան AI-ից

Ճառագայթային կապերը առաջանում են, երբ երկու կամ ավելի օբյեկտներ միմյանց հղում են անում, ինչը խոչընդոտում է ավտոմատ հիշողության ազատմանը, հատկապես երբ օգտագործվում է հղումների հաշվարկը:

iOS-ում (Objective-C/Swift)՝ ճառագայթային կապերից առաջացած հիշողության արտահոսքերը կանխելու համար օգտագործվում են՝

  • Եղած հղումներ (weak) — չեն ավելացնում հղումների հաշվիչը, ավտոմատ կերպով զրոյական են դառնում օբյեկտի հեռացման ժամանակ:
  • Անհատական հղումներ (unowned) — չեն ավելացնում հաշվիչը, բայց չեն զրոյականանում, երբ օբյեկտը հաստատ գոյություն ունի:

Օրինակ՝ Swift-ում՝

class A {
    var b: B?
}

class B {
    weak var a: A?  // թույլ հղում՝ ցիկլը խուսափելու համար
}

weak կամ unowned օգտագործումը կոտրում է ցիկլը, թույլ տալով ARC-ին ճիշտ ազատել օբյեկտները և խուսափել հիշողության արտահոսքներից։