Last Updated on May 19, 2022 by
Pada bahasa pemrograman Swift tersedia fitur yang memudahkan Anda dalam mengelola penggunaan memori aplikasi. Fitur ini dikenal dengan ARC (Automatic Reference Counting). Pada pembahasan kali ini, kami akan mengajak Anda untuk belajar Swift ARC overview. Jika Anda tertarik untuk mengetahui penjelasannya secara lebih lengkap, simak artikel berikut ini sampai akhir.
Table of Contents
Swift ARC Overview
ARC adalah singkatan dari Automatic Reference Counting. Ia digunakan untuk melacak dan mengelola penggunaan memori aplikasi Anda. Fitur manajemen memori secara khusus dibuat untuk bahasa Swift, dan Anda tidak perlu memikirkan manajemen memori sendiri ketika bekerja dengan Swift.
Sebagai Swift ARC Overview, ARC secara otomatis mengosongkan memori yang digunakan oleh instance kelas saat instance tersebut tidak lagi diperlukan. Namun, dalam beberapa kasus, ARC memerlukan lebih banyak informasi tentang hubungan antara bagian-bagian kode Anda untuk mengelola memori untuk Anda.
Menggunakan ARC di Swift sangat mirip dengan pendekatan yang dijelaskan dalam Transitioning to ARC Release Notes untuk menggunakan ARC dengan Objective-C. Sebagai Swift ARC Overview Penghitungan referensi hanya berlaku untuk instance kelas. Struktur dan enumerasi adalah tipe nilai, bukan tipe referensi, dan tidak disimpan dan diteruskan dengan referensi.
Fungsi ARC
Sebelumnya Anda telah mengetahui tentang Swift ARC Overview, selanjutnya kita akan membahas tentang fungsi dari ARC.
- ARC mengalokasikan sepotong memori untuk menyimpan informasi setiap saat ketika instance kelas baru dibuat oleh init().
- Informasi tentang jenis instans dan nilainya disimpan dalam memori.
- Ketika instance kelas tidak lagi diperlukan, ia secara otomatis mengosongkan ruang memori dengan deinit() untuk penyimpanan dan pengambilan instance kelas lebih lanjut.
- ARC melacak properti, konstanta, dan variabel instance kelas perujuk saat ini sehingga deinit() hanya diterapkan ke instance yang tidak digunakan tersebut.
- ARC mempertahankan ‘referensi kuat’ ke properti instance kelas, konstanta, dan variabel untuk membatasi deallokasi saat instance kelas sedang digunakan.
Contoh program arc overview di swift
Setelah mendapatkan Swift ARC overview serta fungsinya, selanjutnya kami akan memberikan contoh program ARC overview di Swift. Ini dia contohnya:
class Siswa { var nama: String! var usia: Int! var tingkat: Int! init(nama: String, usia: Int, tingkat: Int) { self.nama = nama self.usia = usia self.tingkat = tingkat } deinit { print("Deinitialized \(self.nama)") print("Deinitialized \(self.usia)") print("Deinitialized \(self.tingkat)") } } let nama = "Boni kula" let usia = 18 let tingkat = 12 print(nama) print(usia) print(tingkat)
Ketika menjalankan program, Anda akan memperoleh hasil seperti di bawah ini:
Boni kula 18 12
Instance Kelas Siklus Strong Reference ARC :
class siswa { let nama: String var siswa2: siswa2? init (nama: String) { print("Init \(nama)") self.nama = nama } deinit { print("De-init \(self.nama)") } } class siswa2 { let nama: String var siswa: siswa? init (nama: String) { print("Init \(nama)") self.nama = nama } deinit { print("De-init\(self.nama)") } } var den: siswa? var vol: siswa2? den = siswa(name: "Boni") vol = siswa2(name: "Kula") den!.siswa2 = vol vol!.siswa = den
Jika dijalankan, maka hasilny seperti berikut:
Init: Boni Init: Kula
Weak and Unowned Reference ARC
Properti class type memiliki dua cara untuk menyelesaikan siklus strong reference pada Swift.
- Weak References
- Unowned References
Referensi ini digunakan untuk mengaktifkan satu instance untuk merujuk instance lain dalam siklus referensi. Kemudian instance dapat merujuk ke setiap instance alih-alih peduli dengan siklus referensi yang kuat.
Jika pengguna tahu tentang beberapa instance dapat mengembalikan nilai null, Anda dapat menentukannya menggunakan referensi yang lemah. Ketika instance akan mengembalikan sesuatu daripada nil maka nyatakan dengan referensi yang tidak dimiliki.
Weak Reference Program
Ketika menjalankan program di atas, maka hasil yang akan didapat yaitu:
class buku { let judul: String init(judul: String) { self.judul = judul } var konten: konten? deinit { print("\(judul)") } } class konten { let num: Int init(num: Int) { self.num = num } weak var isi: buku? deinit { print("Konten dengan isi nomer \(num)") } } var def: buku? var list: konten? def = buku(judul: "Belajar Swift") list = konten(num: 15) def!.konten = list list!.isi = def def = nil list = nil
Ketika dijalankan, hasil yang akan Anda dapat yaitu:
Belajar Swift Konten dengan isi nomer 15
Unowned Reference Program
class siswa { let nama: String var hasil: nilai? init(nama: String) { self.nama = nama } deinit { print("\(nama)") } } class nilai { let nilai: String unowned let nmsiswa: siswa init(nilai: String, nmsiswa: siswa) { self.nilai = nilai self.nmsiswa = nmsiswa } deinit { print("Siswa berikut \(nilai)") } } var def: siswa? def = siswa(nama: "Doni") def!.hasil = nilai(nilai: "Lulus", nmsiswa: def!) def = nil
Ketika dijalankan, hasilnya akan seperti berikut:
Doni Siswa berikut Lulus
Siklus Strong Reference untuk Closure
Menetapkan penutupan ke properti instance kelas dan badan penutup untuk menangkap instance tertentu dapat menghasilkan siklus referensi yang kuat. Referensi kuat untuk closure ditentukan oleh ‘self.someProperty’ atau ‘self.someMethod()’. Siklus strong reference digunakan sebagai tipe referensi untuk closure.
class HTMLElement { let sample: String let text: String? lazy var asHTML: () -> String = { if let text = self.text { return "<\(self.sample)>\(text)</\(self.sample)>" } else { return "<\(self.sample) />" } } init(sample: String, text: String? = nil) { self.sample = sample self.text = text } deinit { print("De-init: \(sample)") } } var title: HTMLElement? = HTMLElement(sample: "h1", text: "Selamat Belajar Swift") print(title!.asHTML())
Ketika dijalankan, maka hasilnya adalah sebagai berikut:
<h1>Selamat Belajar Swift</h1>
Weak dan Unowned Reference
Saat closure dan instans merujuk satu sama lain, pengguna dapat mendefinisikan tangkapan dalam closure sebagai referensi yang tidak dimiliki. Dalam hal ini, pengguna tidak dapat berbagi instance secara bersamaan. Ketika instance terkadang mengembalikan nilai ‘nil’, tentukan closure dengan instance yang lemah.
class HTMLElement { let def: String let text: String? lazy var asHTML: () -> String = { [unowned self] in if let text = self.text { return "<\(self.def)>\(text)</\(self.def)>" } else { return "<\(self.def) />" } } init(def: String, text: String? = nil) { self.def = def self.text = text } deinit { print("De-init: \(def)") } } var title: HTMLElement? = HTMLElement(def: "section", text: "Belajar Swift") print(title!.asHTML()) title = nil
Ketika dijalankan, hasilnya adalah sebagai berikut:
<section>Belajar Swift</section> De-init: section
Itulah penjelasan tentang Swift ARC Overview serta contoh program arc overview di swift. Jika Anda ingin belajar lebih banyak tentang Swift, kunjungi Codekey di https://codekey.id/ dan dapatkan berbagai materi terkait belajar bahasa pemrograman.
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.