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:
- Zwolnić powiązane zasoby — na przykład zamknąć pliki, zatrzymać timery, anulować żądania sieciowe.
- Usunąć obserwatorów i powiadomienia — jeśli obiekt jest zapisany do powiadomień lub KVO, należy się wypisać, aby uniknąć wycieków.
- Ustawić silne odwołania na null — jeśli istnieją cykliczne odwołania, należy je zerwać, aby ARC mógł zwolnić pamięć.
- Wykonać czyszczenie w metodzie
deinit— w Swift, destruktordeinitsł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.