Saya menguji beberapa isa swizzling dengan Swift, dan menemukan bahwa itu hanya berfungsi ketika NSObject adalah kelas super (langsung atau lebih jauh), atau dengan menggunakan dekorasi '@objc'. Jika tidak, itu akan mengikuti gaya statis- dan vtable-dispatch, seperti C ++.
Apakah normal untuk menentukan kelas Swift tanpa kelas dasar Cocoa / NSObject? Jika saya khawatir, ini berarti mengabaikan banyak dinamisme Objective-C, seperti intersepsi metode dan introspeksi run-time.
Perilaku waktu proses dinamis berada di jantung fitur seperti pengamat properti, Data Inti, Pemrograman Berorientasi Aspek , Perpesanan Pesanan Tinggi , kerangka kerja analitis & logging, dan sebagainya.
Menggunakan gaya pemanggilan metode Objective-C menambahkan sekitar 20 operan kode mesin ke pemanggilan metode, jadi dalam situasi tertentu ( banyak panggilan ketat ke metode dengan badan kecil ) pengiriman statis dan vtable gaya C ++ dapat bekerja lebih baik.
Tetapi mengingat aturan umum 95-5 ( 95% peningkatan kinerja berasal dari penyetelan 5% kode ), bukankah masuk akal untuk memulai dengan fitur dinamis yang kuat dan mengeras jika diperlukan?