Sobes.tech
Junior — Middle

Чӣ гуна ёдгирӣ барои объектҳо бо истинодҳои даврӣ дар муҳитҳои идорашаванда раванду?

sobes.tech AI

Ҷавоб аз AI

Дар муҳитҳои идорашаванда, монанди iOS бо ARC (Ҳисоби худкори истинодҳо), озод кардани хотира барои объектҳое бо истинодҳои даврӣ автоматӣ намеояд, зеро ARC наметавонад циклҳои истинодҳоро қатъ кунад.

Барои ҳалли ин масъала, истифодаи истинодҳои заиф (weak) ва беҳуқуқ (unowned) истифода мешавад, ки ҳисобкунии истинодро ба объект зиёд намекунанд. Ин имкон медиҳад, ки циклҳоро қатъ кунанд ва хотираро дуруст озод кунанд.

Масалан:

class Person {
    var name: String
    weak var apartment: Apartment? // истиноди заиф

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // истиноди беҳуқуқ

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Ин ҷо, Person ва Apartment ба ҳамдигар ишора мекунанд, аммо яке аз ишораҳо заиф аст, ки аз рехтани хотира пешгирӣ мекунад.

Агар циклҳои ишораҳо қатъ нашаванд, объектҳо дар хотира бо вуҷуди набудани ишораҳои хориҷӣ мемонанд, ки ба рехтани хотира оварда мерасонад.