0Pricing
Swift Academy · Pelajaran

Referensi weak dan unowned

Memilih antara weak (Optional) dan unowned (non-Optional) untuk memutus siklus.

Referensi weak dan unowned adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Selamat Datang

Memutus siklus retensi memerlukan referensi yang tidak menambah jumlah ARC. Swift menyediakan dua jenis: `weak` (opsional, otomatis diubah menjadi nihil) dan `unowned` (non-opsional, tidak aman jika nihil).

Referensi weak

```swift class Owner { var pet: Pet? } class Pet { weak var owner: Owner? } // does not retain var o: Owner? = Owner() var p: Pet? = Pet() o?.pet = p p?.owner = o o = nil // Owner deinit — p.owner becomes nil automatically ```

weak Selalu Opsional

```swift class View { weak var delegate: ViewDelegate? } ``` `weak` harus berupa `var` dan opsional — Swift otomatis mengubahnya menjadi nihil ketika objek yang dirujuk didealokasi.

Referensi unowned

```swift class Customer { var card: CreditCard? } class CreditCard { unowned let customer: Customer // card always has a customer init(customer: Customer) { self.customer = customer } } ``` `unowned` tidak mempertahankan objek dan bersifat non-opsional — Anda menjamin bahwa objek yang dirujuk tetap hidup lebih lama daripada objek ini.

Memilih antara weak dan unowned

| Skenario | Gunakan | |---|---| | Objek yang dirujuk mungkin menjadi nihil | `weak` | | Objek yang dirujuk selalu hidup lebih lama daripada objek ini | `unowned` | | Tidak yakin | `weak` (lebih aman) |

Mengakses unowned Setelah Dealokasi

```swift var customer: Customer? = Customer() var card = CreditCard(customer: customer!) customer = nil print(card.customer.name) // 💥 crash — unowned is dangling ``` Jangan pernah mengakses `unowned` setelah objek yang dirujuk didealokasi.

[weak self] dalam Penutupan

```swift class VC { func load() { api.fetch { [weak self] data in guard let self else { return } self.render(data) } } } ``` `[weak self]` adalah perbaikan siklus retensi yang paling umum dalam Swift.

[unowned self] dalam Penutupan

```swift class Session { var onComplete: (() -> Void)? init() { onComplete = { [unowned self] in // self always outlives closure self.finish() } } } ``` Gunakan `[unowned self]` hanya jika Anda yakin `self` tidak akan nihil saat penutupan dijalankan.

Pengosongan Otomatis Referensi

```swift class Timer { weak var delegate: TimerDelegate? } var d: TimerDelegate? = ConcreteDelegate() let t = Timer() t.delegate = d d = nil print(t.delegate) // nil — automatically zeroed ```

Praktik Terbaik Pola Delegasi

Selalu deklarasikan properti delegasi sebagai `weak`: ```swift protocol MyDelegate: AnyObject { func didUpdate() } class MyView { weak var delegate: MyDelegate? } ``` Batasan `AnyObject` diperlukan untuk menggunakan `weak` dengan protokol.

Pemeriksaan Singkat

Jenis referensi apa yang otomatis diatur menjadi `nil` ketika objek yang dirujuk didealokasi?

Ringkasan

Pokok penting: • `weak` — opsional, otomatis menjadi nihil, aman • `unowned` — non-opsional, dijamin hidup lebih lama, mengalami kerusakan jika asumsi salah • Pola delegasi: selalu `weak var delegate: Protocol?` dengan batasan `AnyObject` • Penutupan: `[weak self]` adalah pola standar; gunakan `guard let self` di dalamnya • Jika ragu, pilih `weak` daripada `unowned` Berikutnya: daftar penangkapan penutupan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Referensi weak dan unowned” gratis?

Ya — teks lengkap “Referensi weak dan unowned” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Referensi weak dan unowned”?

Memilih antara weak (Optional) dan unowned (non-Optional) untuk memutus siklus. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Referensi weak dan unowned” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Cara ARC Menghitung Referensi
  2. Siklus Retain: Penyebab dan Deteksi
  3. Referensi weak dan unowned
  4. Daftar Capture Closure dan [weak self]
← Kembali ke Swift Academy