Swift Academy · Pelajaran

Mutasi, Perkongsian dan Aliasing Tidak Dijangka

Fahami cara rujukan yang dikongsi menyebabkan pepijat dan cara jenis nilai mencegahnya.

Pelajaran 2 daripada 412 langkah

Mutasi, Perkongsian dan Aliasing Tidak Dijangka ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 2 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

Alias berlaku apabila dua pemboleh ubah merujuk kepada objek yang sama. Dengan jenis nilai, perkara ini mustahil; dengan jenis rujukan, ia boleh menyebabkan pepijat yang mengejutkan. Memahami perbezaan ini adalah penting.

Jenis Nilai Tiada Alias

```swift var a = [1,2,3] var b = a // independent copy a.append(4) print(b) // [1,2,3] — unchanged ``` Setiap penetapan jenis nilai menghasilkan salinan bebas.

Jenis Rujukan DO Mempunyai Alias

```swift class Counter { var value = 0 } let a = Counter() let b = a // SAME object a.value += 1 print(b.value) // 1 — b sees the change! ``` Kedua-dua `a` dan `b` menunjuk kepada objek timbunan yang sama.

Alias dalam Parameter Fungsi

```swift func increment(_ c: Counter) { c.value += 1 } let shared = Counter() increment(shared) print(shared.value) // 1 — mutated by the function ``` Kelas dihantar melalui rujukan — fungsi tersebut mengubah objek asal.

Masalah: Keadaan Boleh Ubah yang Dikongsi

```swift class Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // aliased! cache.items.append("data") print(cache2.items) // ["data"] — unexpected! ``` Beginilah bahagian kod yang kelihatan tidak berkaitan boleh mempengaruhi satu sama lain.

Menyelesaikan dengan Jenis Nilai

```swift struct Cache { var items: [String] = [] } var cache = Cache() var cache2 = cache // independent copy cache.items.append("data") print(cache2.items) // [] — unaffected ```

Menyelesaikan dengan Menyalin Kelas

```swift func process(_ c: Counter) { var local = Counter() local.value = c.value // copy values, not reference local.value += 1 } ``` Apabila anda memerlukan semantik rujukan tetapi bukan alias, salin nilai secara eksplisit.

Keselamatan Bebenang dan Alias

Pengaliasan menjadi amat berbahaya merentas utasan: ```swift // Thread 1: cache.items.append("a") // Thread 2 simultaneously: cache.items.append("b") // ❌ data race! ``` Jenis nilai dalam Swift Concurrency mencegah perkara ini secara lalai — hanya aktor boleh berkongsi keadaan yang boleh diubah.

Mengesan Pengaliasan Tidak Sengaja

Thread Sanitizer Xcode (TSan) mengesan perlumbaan data semasa masa jalan. Dayakannya di bawah Skema > Diagnostik > Thread Sanitizer. Penguatkuasaan Eksklusiviti Swift mengesan pelanggaran pengaliasan satu utasan bagi parameter `inout` semasa masa jalan.

Corak Pengaliasan Sengaja

Kadangkala pengaliasan memang disengajakan — contohnya cache global: ```swift class AppCache { static let shared = AppCache() // intentional shared reference var data: [String: Any] = [:] } ``` Dokumentasikan perkongsian yang disengajakan dengan jelas; elakkan pengaliasan tidak sengaja dengan mengutamakan jenis nilai.

Semakan Pantas

Apakah yang berlaku apabila anda menetapkan tika kelas kepada pemboleh ubah baharu?

Ringkasan

Perkara utama: • Jenis nilai (struktur) — penetapan menyalin; pengaliasan tidak mungkin • Jenis rujukan (kelas) — penetapan berkongsi rujukan; pengaliasan mungkin • Pengaliasan merentas utasan = perlumbaan data • Utamakan struktur; gunakan kelas hanya apabila identiti dikongsi diperlukan • Gunakan TSan dan Eksklusiviti Swift untuk mengesan masalah Seterusnya: graf nilai/rujukan bercampur.
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 “Mutasi, Perkongsian dan Aliasing Tidak Dijangka” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Mutasi, Perkongsian dan Aliasing Tidak Dijangka”, 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 “Mutasi, Perkongsian dan Aliasing Tidak Dijangka”?

Fahami cara rujukan yang dikongsi menyebabkan pepijat dan cara jenis nilai mencegahnya. 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 2 daripada 4.

Berapa lamakah pelajaran “Mutasi, Perkongsian dan Aliasing Tidak Dijangka” 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. Stack berbanding Heap: Tempat Nilai Disimpan
  2. Mutasi, Perkongsian dan Aliasing Tidak Dijangka
  3. Graf Nilai/Rujukan Campuran
  4. Mereka Bentuk API untuk Semantik Nilai
← Kembali ke Swift Academy