Sobes.tech
Junior — Middle

Jakie kroki należy podjąć, aby poprawnie zakończyć niszczenie obiektu lub zasobu?

sobes.tech AI

Odpowiedź od AI

Aby poprawnie zniszczyć obiekt lub zwolnić zasoby w iOS, należy wykonać następujące kroki:

  1. Zwolnić powiązane zasoby — na przykład zamknąć pliki, zatrzymać timery, anulować żądania sieciowe.
  2. Usunąć obserwatorów i powiadomienia — jeśli obiekt jest zapisany do powiadomień lub KVO, należy się wypisać, aby uniknąć wycieków.
  3. Ustawić silne odwołania na null — jeśli istnieją cykliczne odwołania, należy je zerwać, aby ARC mógł zwolnić pamięć.
  4. Wykonać czyszczenie w metodzie deinit — w Swift, destruktor deinit służy do wykonania końcowych działań przed zniszczeniem obiektu.

Przykład:

class MyResource {
    var timer: Timer?

    init() {
        timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
            print("Tick")
        }
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification), name: .someNotification, object: nil)
    }

    @objc func handleNotification() {
        // obsługa
    }

    deinit {
        timer?.invalidate()
        NotificationCenter.default.removeObserver(self)
        print("MyResource zniszczony")
    }
}

W ten sposób poprawne niszczenie gwarantuje zwolnienie zasobów i zapobiega wyciekom pamięci.