IBOutlet
harus kuat, karena alasan kinerja. Lihat Referensi Storyboard, IBOutlet Kuat, Adegan Dok di iOS 9
Seperti dijelaskan dalam paragraf ini, outlet ke subview tampilan view controller bisa menjadi lemah, karena subview ini sudah dimiliki oleh objek tingkat atas dari file nib. Namun, ketika Outlet didefinisikan sebagai pointer lemah dan pointer diatur, ARC memanggil fungsi runtime:
id objc_storeWeak(id *object, id value);
Ini menambahkan pointer (objek) ke tabel menggunakan nilai objek sebagai kunci. Tabel ini disebut sebagai tabel lemah. ARC menggunakan tabel ini untuk menyimpan semua petunjuk lemah dari aplikasi Anda. Sekarang, ketika nilai objek deallocated, ARC akan beralih di atas tabel lemah dan mengatur referensi lemah ke nil. Atau, ARC dapat menghubungi:
void objc_destroyWeak(id * object)
Kemudian, objek tidak terdaftar dan objc_destroyWeak memanggil lagi:
objc_storeWeak(id *object, nil)
Pembukuan ini terkait dengan referensi yang lemah bisa memakan waktu 2-3 kali lebih lama dari rilis referensi yang kuat. Jadi, referensi yang lemah memperkenalkan overhead untuk runtime yang dapat Anda hindari dengan hanya mendefinisikan outlet sebagai kuat.
Pada Xcode 7, disarankan strong
Jika Anda menonton WWDC 2015 sesi 407 Menerapkan Desain UI di Interface Builder , itu menyarankan (transkrip dari http://asciiwwdc.com/2015/sessions/407 )
Dan opsi terakhir yang ingin saya tunjukkan adalah tipe penyimpanan, yang bisa kuat atau lemah.
Secara umum Anda harus membuat outlet Anda kuat, terutama jika Anda menghubungkan outlet ke tampilan sub atau ke kendala yang tidak selalu akan dipertahankan oleh hierarki tampilan.
Satu-satunya saat Anda benar-benar perlu membuat outlet menjadi lemah adalah jika Anda memiliki tampilan khusus yang mereferensikan sesuatu yang mendukung hierarki tampilan dan secara umum itu tidak dianjurkan.
Jadi saya akan memilih yang kuat dan saya akan mengklik terhubung yang akan menghasilkan outlet saya.
IBOutletCollection()
tidak bolehweak
, jika tidak kembali sebagainil
.