Sobes.tech
Middle — Middle+

Ինչպես է սկսվում հղումների պահպանումը վերահսկվող հիշողությամբ ծրագրավորման լեզուներում?

sobes.tech AI

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

Ավտոմատ հիշողության կառավարում ունեցող ծրագրավորման լեզուներում, ինչպիսիք են Swift-ը կամ Objective-C-ը iOS-ում, պահման ցիկլը (retain cycle) առաջանում է, երբ երկու կամ ավելի օբյեկտներ միմյանց պահում են ուժեղ հղումներով, ինչի պատճառով գարշահավաքիչը կամ ARC (Ավտոմատ Հղումների Հաշվարկը) չի կարող ազատել այդ օբյեկտները:

Պահման ցիկլը սկսվում է, երբ, օրինակ, օբյեկտ A-ն պարունակում է ուժեղ հղում օբյեկտ B-ին, իսկ օբյեկտ B-ն իր հերթին պարունակում է ուժեղ հղում օբյեկտ A-ին: Սա հանգեցնում է, որ երկու օբյեկտների հղումների հաշվիչները երբեք չեն հասնի զրոյի:

Որպես կանխարգելիչ միջոցներ օգտագործվում են՝

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

Օրինակ՝

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // թույլ հղում՝ ցիկլը կանխելու համար
}

Այսպիսով, պահման ցիկլը սկսվում է փոխադարձ ուժեղ հղումներով, և կանխվում է թույլ կամ անհատական հղումներով ցիկլը կտրելով։