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? // թույլ հղում՝ ցիկլը կանխելու համար
}
Այսպիսով, պահման ցիկլը սկսվում է փոխադարձ ուժեղ հղումներով, և կանխվում է թույլ կամ անհատական հղումներով ցիկլը կտրելով։