Junior — Middle
Как се освобождава паметта, заета от обект в програма?
sobes.tech AI
Отговор от AI
В iOS освобождаването на паметта се случва главно автоматично благодарение на системата ARC (Automatic Reference Counting). Всеки обект има брояч на референциите, който се увеличава при създаване на нова силна референция и намалява при нейното премахване. Когато броячът достигне нула, обектът се унищожава автоматично и паметта се освобождава.
Ако в кода възникнат циклични референции (например, два обекта с силни референции един към друг), паметта не се освобождава. За решаване на този проблем се използват слаби (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
}
}
По този начин, освобождаването на паметта става автоматично, ако референциите се управляват правилно.