Anda bisa menggunakan bahasa yang dikenal sebagai Swift dan ganti namanya menjadi "Swift with ARC". Anda kemudian dapat membuat bahasa baru bernama "Swift with GC" dengan sintaksis yang persis sama, tetapi dengan lebih sedikit jaminan tentang kapan objek-objek dideallocated.
Di Swift with ARC, begitu jumlah referensi adalah 0, objek akan hilang. Dengan pengumpulan sampah, selama Anda memiliki referensi yang lemah, Anda bisa menetapkan referensi yang lemah itu ke referensi yang kuat untuk "memulihkan" objek. (Dalam Swift, begitu jumlah referensi adalah 0, referensi lemah adalah nihil); itu perbedaan utama.
Dan tentu saja Swift dengan ARC menjamin bahwa membunuh jumlah referensi terakhir akan segera membatalkan alokasi objek. Misalnya, Anda mungkin memiliki kelas FileWriter, di mana Anda tidak diizinkan memiliki dua instance menulis ke file yang sama ada pada saat yang sama. Di Swift dengan ARC Anda bisa mengatakan oldWriter = nil; newWriter = FileWriter (...) dan Anda akan tahu bahwa FileWriter baru hanya dibuat setelah yang lama dihapus (kecuali Anda menyimpan referensi lain di sekitar); di Swift dengan GC ini tidak akan berhasil.
Perbedaan lain adalah bahwa dalam "Swift with ARC", objek yang hanya direferensikan melalui siklus referensi yang kuat, tetapi tidak benar-benar dapat dijangkau, dijamin tidak dapat dialokasikan.
deinit
sebagai kata kunci dan semantik terkaitnya memang hal-hal yang menempatkan penghitungan referensi tepat dalam bahasa, bukan implementasi, ranah.