Sobes.tech
Middle

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

sobes.tech AI

Ҷавоб аз AI

Дар Swift идоракунии хотира барои намудҳои истинод (синфҳо) тавассути ҳисобкунии автоматии истинод (ARC, Automatic Reference Counting) амалӣ мешавад. Ҳар як объект дар хати хотира ҳисобкунии истинодро нигоҳ медорад: шумораи истинодҳои фаъол ба он объект. Вақте ки истиноди нав ба объект эҷод мешавад, ҳисобкунак меафзояд, ва вақте ки истинод истифода намешавад, кам мешавад. Вақте ки ҳисобкунак ба сифр мерасад, объект автоматӣ аз хотира хориҷ мешавад.

Масалан:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var a: Person? = Person(name: "Alice") // ҳисобкунак = 1
var b = a                             // ҳисобкунак = 2
b = nil                              // ҳисобкунак = 1
a = nil                              // ҳисобкунак = 0, объект хориҷ мешавад

Муҳим аст, ки аз цикли истинодҳо (retain cycles) пешгирӣ шавад, вақте ки ду объект ба ҳам истинод мекунанд, ки ин аз озод кардани хотира монеъ мешавад. Барои ин, истифодаи истинодҳои суст (weak) ва беҳуқуқ (unowned) маъмул аст.

Намудҳои арзиш (структураҳо, enumeration) дар стек нигоҳ дошта мешаванд ва ҳангоми таъин кардан нусхабардорӣ мешаванд, бинобар ин ARC ба онҳо татбиқ намешавад.