Swift Academy · Pelajaran

Dasar ARC: strong / weak / unowned

Pelajari penghitungan referensi ARC dan kapan menggunakan strong , weak , serta unowned untuk menghindari kebocoran memori.

Pelajaran 1 dari 38 langkah

Dasar ARC: strong / weak / unowned adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. 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 3 pelajaran total.

ARC dalam satu menit

Swift menggunakan ARC (Penghitungan Referensi Otomatis). Setiap referensi kuat meningkatkan jumlah referensi suatu instans kelas. Saat jumlahnya turun menjadi nol, deinit dijalankan dan memori dibebaskan.

Kuat secara bawaan

Kuat adalah pengaturan bawaan. Saat referensi kuat terakhir hilang, deinit dipanggil.

final class Person {
    let name: String
    init(_ name: String) { self.name = name; print("init:", name) }
    deinit { print("deinit:", name) }
}

var p: Person? = Person("Ada")
p = nil  // ARC count -> 0, triggers deinit

Contoh siklus

Referensi kuat dua arah membentuk siklus retensi. ARC tidak dapat membebaskannya sehingga terjadi kebocoran.

final class A {
    var b: B?
    deinit { print("A deinit") }
}
final class B {
    var a: A?
    deinit { print("B deinit") }
}

var a: A? = A()
var b: B? = B()
a?.b = b      // strong
b?.a = a      // strong

a = nil       // no deinit (cycle)
b = nil       // still no deinit (leak)

Referensi lemah

Jadikan satu sisi lemah untuk menghindari siklus. Referensi lemah bersifat opsional dan otomatis menjadi nil saat objek didealokasi.

final class A2 {
    weak var b: B2?   // weak breaks the strong cycle
    deinit { print("A2 deinit") }
}
final class B2 {
    var a: A2?
    deinit { print("B2 deinit") }
}

var a2: A2? = A2()
var b2: B2? = B2()
a2?.b = b2   // weak
b2?.a = a2   // strong

a2 = nil     // A2 deinit runs
b2 = nil     // B2 deinit runs

Referensi tanpa kepemilikan

Gunakan tanpa kepemilikan saat objek yang dirujuk akan tetap hidup lebih lama daripada referensi ini. Referensi ini tidak opsional dan tidak diatur menjadi nil; mengaksesnya setelah dealokasi akan menyebabkan galat—jadi pastikan masa hidupnya terjamin.

final class Customer {
    let name: String
    var card: CreditCard?
    init(_ name: String) { self.name = name }
    deinit { print("Customer deinit") }
}
final class CreditCard {
    unowned let owner: Customer   // never optional; owner must outlive card
    init(owner: Customer) { self.owner = owner }
    deinit { print("CreditCard deinit") }
}

var cust: Customer? = Customer("Lars")
cust!.card = CreditCard(owner: cust!)
cust = nil  // deallocates both (no cycle)

Kiat & pola

Kiat:

  • Gunakan kuat sebagai pilihan bawaan.
  • Putus siklus dengan lemah (delegasi biasanya bersifat lemah).
  • Gunakan tanpa kepemilikan hanya jika masa hidupnya terjamin (misalnya, anak → induk).
  • Kelas adalah tipe referensi; struktur/enumerasi tidak memerlukan aturan ARC.

Lemah vs tanpa kepemilikan

Pemeriksaan singkat: Kapan Anda memilih lemah dibandingkan tanpa kepemilikan?

Ringkasan

Ringkasan: ARC membebaskan objek saat tidak ada referensi kuat yang tersisa. Cegah siklus dengan lemah (opsional) atau tanpa kepemilikan (masa hidup terjamin). Pilih kepemilikan aman yang paling sederhana.

Gratis untuk memulai

Belajar Swift dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
122
Pelajaran
409

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar ARC: strong / weak / unowned” gratis?

Ya — teks lengkap “Dasar ARC: strong / weak / 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 3 pelajaran total.

Apa yang akan aku pelajari di “Dasar ARC: strong / weak / unowned”?

Pelajari penghitungan referensi ARC dan kapan menggunakan strong , weak , serta unowned untuk menghindari kebocoran memori. 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 1 dari 3.

Berapa lama pelajaran “Dasar ARC: strong / weak / 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. Dasar ARC: strong / weak / unowned
  2. Siklus retain & pemutusan dengan weak/unowned
  3. Tipe nilai untuk mengurangi berbagi
← Kembali ke Swift Academy