Swift Academy · Pelajaran

Penyahinisialisasi dan Kitar Hayat Memori

Gunakan deinit untuk membersihkan sumber sebelum objek dinyahperuntukkan.

Pelajaran 4 daripada 412 langkah

Penyahinisialisasi dan Kitar Hayat Memori ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Selamat Datang

Kelas Swift boleh mentakrifkan `deinit` yang dijalankan sejurus sebelum instans dinyahperuntukkan. Memahami keseluruhan kitar hayat objek — init → penggunaan → deinit — adalah penting untuk pengurusan sumber.

Apakah 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 ```

Peraturan Sintaks deinit

• Kelas sahaja — struktur dan enum tidak mempunyai `deinit` • Tiada parameter atau nilai pulangan • Tiada kurungan: `deinit { }`, bukannya `deinit() { }` • Dipanggil secara automatik oleh ARC — jangan panggil sendiri • `deinit` kelas induk dipanggil secara automatik selepas `deinit` subkelas

Kes Penggunaan Pembersihan

Kegunaan lazim untuk `deinit`: • Menutup sambungan rangkaian • Mengalih keluar pemerhati pemberitahuan: `NotificationCenter.default.removeObserver(self)` • Membatalkan pemasa • Menutup pemegang fail atau sambungan pangkalan data

Kiraan Pengekalan dan Kitar Hayat

ARC menjejaki bilangan rujukan kukuh yang menunjuk kepada sesuatu objek: ```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 ```

Rantaian deinit Subkelas

```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 Menghalang Pengekalan

```swift class Owner { var pet: Dog? deinit { print("Owner gone") } } class Dog { weak var owner: Owner? // weak = no strong retain deinit { print("Dog gone") } } ``` Apabila `owner` ditetapkan kepada nil, `Owner` boleh dinyahperuntukkan walaupun `Dog` menyimpan rujukan kepadanya.

Kitaran Pengekalan Menghalang 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! ```

Corak Pembatalan Pemasa

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

Pengesanan Kebocoran dengan Instruments

Jika `deinit` tidak pernah dipanggil, kemungkinan besar terdapat kitaran pengekalan. Gunakan Xcode Instruments → templat Leaks untuk mengesan objek yang diperuntukkan tetapi tidak pernah dinyahperuntukkan.

Semakan Pantas

Jenis manakah yang boleh mentakrifkan `deinit`?

Ulang Kaji

Perkara penting: • `deinit { }` — bersihkan sumber sebelum penyahperuntukan • Kelas sahaja; `deinit` kelas induk dipanggil secara automatik selepas subkelas • ARC menentukan masa `deinit` dijalankan (kiraan pengekalan berkurang kepada 0) • Kitaran pengekalan menghalang `deinit` — putuskannya dengan `weak`/`unowned` • Gunakan Instruments Leaks untuk mencari objek yang `deinit`-nya tidak pernah dijalankan Kursus selesai! Seterusnya: corak penghitungan dan mesin keadaan.
Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Penyahinisialisasi dan Kitar Hayat Memori” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Penyahinisialisasi dan Kitar Hayat Memori”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penyahinisialisasi dan Kitar Hayat Memori”?

Gunakan deinit untuk membersihkan sumber sebelum objek dinyahperuntukkan. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Penyahinisialisasi dan Kitar Hayat Memori” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pewarisan Kelas dan Kata Kunci super
  2. override, final dan Pencegahan Pewarisan Subkelas
  3. Penukaran Jenis: is, as?, as! dan as
  4. Penyahinisialisasi dan Kitar Hayat Memori
← Kembali ke Swift Academy