0Pricing
Swift Academy · Lekcja

Destruktory i cykl życia pamięci

Używanie deinit do zwalniania zasobów przed dealokacją obiektu.

Destruktory i cykl życia pamięci to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Klasy Swift mogą definiować `deinit`, który jest wykonywany tuż przed dealokacją instancji. Zrozumienie pełnego cyklu życia obiektu — init → użycie → deinit — ma kluczowe znaczenie dla zarządzania zasobami.

Czym jest deinit?

```swift class FileHandle { let path: String init(path: String) { self.path = path; print("Opened \(path)") } deinit { print("Closed \(path)") } } do { let f = FileHandle(path: "/tmp/log.txt") } // deinit called here when f goes out of scope ```

Zasady składni deinit

• Tylko klasy — struktury i wyliczenia nie mają `deinit` • Bez parametrów ani wartości zwracanej • Bez nawiasów: `deinit { }`, a nie `deinit() { }` • Wywoływany automatycznie przez ARC — nigdy nie wywołuj go samodzielnie • `deinit` nadklasy jest wywoływany automatycznie po `deinit` podklasy

Zastosowania czyszczenia zasobów

Typowe zastosowania `deinit`: • Zamykanie połączeń sieciowych • Usuwanie obserwatorów powiadomień: `NotificationCenter.default.removeObserver(self)` • Unieważnianie timerów • Zamykanie uchwytów plików lub połączeń z bazą danych

Licznik retencji i cykl życia

ARC śledzi liczbę silnych odwołań wskazujących na obiekt: ```swift var a: Dog? = Dog() // retain count = 1 var b = a // retain count = 2 a = nil // retain count = 1 b = nil // retain count = 0 → deinit called ```

Łańcuch deinit podklasy

```swift class Base { deinit { print("Base deinit") } } class Child: Base { deinit { print("Child deinit") } // super.deinit called automatically after } var c: Child? = Child() c = nil // prints: Child deinit, then Base deinit ```

weak zapobiega retencji

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Gdy `owner` zostanie ustawione na nil, `Owner` może zostać dealokowany, mimo że `Dog` przechowuje odwołanie.

Cykle retencji uniemożliwiają deinit

```swift class A { var b: B? } class B { var a: A? } var a: A? = A() var b: B? = B() a?.b = b b?.a = a a = nil b = nil // deinit never called — retain cycle! ```

Wzorzec unieważniania timera

```swift class PollingService { var timer: Timer? func start() { timer = Timer.scheduledTimer(...) } deinit { timer?.invalidate() timer = nil print("Timer stopped") } } ```

Wykrywanie wycieków w Instruments

Jeśli `deinit` nigdy nie jest wywoływany, prawdopodobnie występuje cykl retencji. Użyj w Xcode Instruments szablonu Leaks, aby wykryć obiekty, które zostały zaalokowane, ale nigdy nie zostały dealokowane.

Szybkie sprawdzenie

Które typy mogą definiować `deinit`?

Podsumowanie

Najważniejsze informacje: • `deinit { }` — czyszczenie zasobów przed dealokacją • Tylko klasy; `deinit` nadklasy jest automatycznie wywoływany po `deinit` podklasy • ARC określa moment wywołania `deinit` — gdy liczba retencji spada do 0 • Cykle retencji uniemożliwiają wywołanie `deinit` — należy je przerwać za pomocą `weak`/`unowned` • Użyj Instruments Leaks, aby znaleźć obiekty, dla których `deinit` nigdy nie jest wywoływany Kurs ukończony! Dalej: wzorce enumów i maszyny stanów.

Często zadawane pytania

Czy lekcja „Destruktory i cykl życia pamięci” jest bezpłatna?

Tak — pełny tekst „Destruktory i cykl życia pamięci” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Destruktory i cykl życia pamięci”?

Używanie deinit do zwalniania zasobów przed dealokacją obiektu. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Destruktory i cykl życia pamięci”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dziedziczenie klas i słowo kluczowe super
  2. override, final i zapobieganie dziedziczeniu
  3. Rzutowanie typów: is, as?, as! i as
  4. Destruktory i cykl życia pamięci
← Powrót do Swift Academy