Sobes.tech
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.