Junior — Middle
Jak zwalnia się pamięć zajmowaną przez obiekt w programie?
sobes.tech AI
Odpowiedź od AI
W iOS główne uwalnianie pamięci odbywa się automatycznie dzięki systemowi ARC (Automatic Reference Counting). Każdy obiekt ma licznik odwołań, który zwiększa się przy tworzeniu nowego silnego odwołania i zmniejsza się przy jego usunięciu. Gdy licznik osiąga zero, obiekt jest automatycznie niszczony, a pamięć jest zwalniana.
Jeśli w kodzie pojawią się cykliczne odwołania (np. dwa obiekty z silnymi odwołaniami do siebie), pamięć nie jest zwalniana. Aby rozwiązać ten problem, używa się odwołań słabych (weak) lub bezwłaściwych (unowned).
Przykład:
class Person {
var name: String
weak var apartment: Apartment? // słabe odwołanie, aby uniknąć cyklu
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // bezwłaściwe odwołanie
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
W ten sposób, automatyczne zwalnianie pamięci zachodzi, jeśli odwołania są poprawnie zarządzane.