Saya pikir, di sebagian besar kelas, jika nilai pengembalian dari [super init] adalah nihil dan Anda memeriksanya, seperti yang disarankan oleh praktik standar, dan kemudian kembali secara prematur jika nihil, pada dasarnya aplikasi Anda masih tidak akan berfungsi dengan benar. Jika Anda berpikir tentang hal itu, meskipun jika (self! = Nil) periksa ada, untuk operasi yang tepat dari kelas Anda, 99,99% dari waktu Anda benar - benar membutuhkan diri untuk menjadi nihil. Sekarang, misalkan, untuk alasan apa pun, [yang super init] lakukan kembali nihil, pada dasarnya cek Anda terhadap nihil pada dasarnya lewat uang hingga pemanggil kelas Anda, di mana ia kemungkinan akan gagal lagian, karena secara alami akan menganggap bahwa panggilan itu berhasil
Pada dasarnya, yang saya maksudkan adalah 99,99% dari waktu, if (self! = Nil) tidak membelikan Anda apa pun dalam hal ketahanan yang lebih besar, karena Anda hanya menyerahkan uang kepada penyerang Anda. Untuk benar-benar dapat menangani ini dengan kuat, Anda benar-benar perlu melakukan cek di seluruh hierarki panggilan Anda. Dan meskipun begitu, satu-satunya hal yang akan membeli Anda adalah aplikasi Anda akan gagal sedikit lebih bersih / kuat. Tetapi itu masih akan gagal.
Jika kelas perpustakaan secara sewenang-wenang memutuskan untuk mengembalikan nol sebagai akibat dari [super init], Anda cukup banyak, dan itu lebih merupakan indikasi bahwa penulis kelas perpustakaan membuat kesalahan implementasi.
Saya pikir ini lebih merupakan saran pengkodean lama, ketika aplikasi berjalan dalam memori yang jauh lebih terbatas.
Tetapi untuk kode level C, saya biasanya masih akan memeriksa nilai pengembalian malloc () terhadap sebuah pointer NULL. Sedangkan, untuk Objective-C, sampai saya menemukan bukti yang bertentangan, saya pikir saya biasanya akan melewatkan pemeriksaan if (self! = Nil). Mengapa ada perbedaan?
Karena, pada level C dan malloc, dalam beberapa kasus Anda benar-benar dapat pulih sebagian. Sedangkan saya pikir dalam Objective-C, dalam 99,99% kasus, jika [super init] mengembalikan nol, Anda pada dasarnya kacau, bahkan jika Anda mencoba menanganinya. Anda mungkin juga membiarkan aplikasi crash dan berurusan dengan akibatnya.