Junior — Middle
Можете ли да обясните как се освобождава паметта, заета от обект в системата?
sobes.tech AI
Отговор от AI
В iOS освобождаването на паметта на обектите се извършва главно чрез механизма ARC (Автоматично преброяване на референциите).
Всеки обект в паметта има брояч на референциите: броя на активните препратки към него. Когато се създаде препратка към обект, броячът се увеличава; когато препратката бъде премахната, той намалява. Когато броячът достигне нула, обектът автоматично се освобождава от паметта.
Пример:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Alex") // брояч на референциите = 1
var person2 = person1 // брояч на референциите = 2
person1 = nil // брояч на референциите = 1
person2 = nil // брояч на референциите = 0, обектът се освобождава
Ако има циклични препратки (например, два обекта, които се препращат един към друг), ARC не може автоматично да освободи паметта. За решаване на този проблем се използват слаби (weak) или безвладетелски (unowned) препратки, които не увеличават брояча.