Sobes.tech
Junior — Middle

Կարող եք բացատրել, թե ինչպիսի տեսակի հիշողության արտահոսքեր կան ծրագրերում?

sobes.tech AI

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

iOS հավելվածներում հիմնական տեսակի հիշողության արտահոսքերը կապված են օբյեկտների մասին սխալ կառավարման հետ՝

  • ուժեղ հղումների ցիկլեր (Strong Reference Cycles) — երբ երկու օբյեկտ ունեն ուժեղ հղումներ միմյանց, և ոչ մեկը չի կարող ազատվել:
  • փակմանների (Closures) պատճառով արտահոսքներ — եթե փակումը ուժեղ հղումով բռնում է self-ը, դա կարող է հանգեցնել ցիկլի:
  • չազատված ռեսուրսներ — օբյեկտներ, որոնք չեն ազատվում deinit-ի բացակայության կամ սխալ օգտագործման պատճառով:

օրինակ՝ ուժեղ հղումների ցիկլից խուսափելու համար՝

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // ուժեղ հղումների ցիկլ

Դրա կանխարգելման համար օգտագործվում են թույլ (weak) կամ ոչ սեփական (unowned) հղումներ։