Sobes.tech
Junior — Middle

Чӣ гуна озод кардани хотира дар объектҳое, ки бо истифода аз навъи истинод сохта шудаанд?

sobes.tech AI

Ҷавоб аз AI

Дар iOS, объектҳое, ки бо истифода аз намудҳои истинод (масалан, синфҳо дар Swift ё Objective-C) сохта шудаанд, аз системаи ҳисобкунии автоматии истинодҳо (ARC — Automatic Reference Counting) идора мешаванд. Ҳар як объект ҳисобкунии истинодҳоро нигоҳ медорад — шумораи истинодҳои фаъол ба он. Вақте ки истиноди нав ба объект сохта мешавад, ҳисобкунак меафзояд, ва вақте ки истинод истифода намешавад (масалан, тағирёбанда аз доираи амал хориҷ мешавад ё ба nil таъин мешавад), ҳисобкунак кам мешавад.

Вақте ки ҳисобкунаки истинод ба объект ба сифр мерасад, ин маънои онро дорад, ки дигар касе ба он ишора намекунад, ва хотирае, ки объект ишғол мекард, автоматӣ озод карда мешавад. Ин кӯмак мекунад, ки аз ҷараёни хотираҳо пешгирӣ шавад, бе ниёз ба идораи дастӣ.

Масалан дар Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Шахс \(name) озод карда шуд")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // ҳисобкунаки истинод афзуд
p1 = nil // ҳисобкунак кам шуд, аммо объект ҳанӯз зинда аст
p2 = nil // ҳисобкунак ба 0 расид, объект озод карда шуд

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