Saya mencoba untuk mendapatkan nama string suatu kelas dari objek kelas itu sendiri.
// For instance
[NSArray className]; // @"NSArray"
Saya telah menemukan object_getClassName(id obj)
tetapi itu membutuhkan contoh yang diberikan, dan dalam kasus saya itu adalah pekerjaan yang tidak perlu.
Jadi bagaimana saya bisa mendapatkan string dari objek kelas, dan bukan contoh?
NSStringFromClass
penerapannya? Apakah lebih berkinerja untuk menyimpan nama kelas dalam suatustatic NSString
variabel?[NSArray class]
) sebenarnya astruct
. Inistruct
berisi banyak informasi tentang kelas, termasuk namanya, metode yang diterapkannya, superclass, dll.NSStringFromClass
Hanya menarik nama kelas dari inistruct
dan mengubahnya menjadiNSString
. Jangan menyimpan nama kelas dalam astatic NSString
, itu tidak akan menawarkan keuntungan kinerja apa pun.NSClassFromString
bekerja sedikit berbeda. Karena semua nama kelas ada di suatu tempat di runtime Objective-C,NSClassFromString
ambil string dan jelajahi daftar kelas yang dikelola oleh runtime mencari kelas yang memiliki nama yang diberikan. Jika menemukannya, mengembalikannya, jika tidak kembaliNil
.class_getName()
runtime, yang mengembalikan string CclassName
adalah metode yang ditambahkan oleh ekstensi skrip yang hanya tersedia di Mac OS X, meskipun itu sangat rewel dalam cara kerjanya karena tidak sepenuhnya didokumentasikan (atau setidaknya itu bukan terakhir kali saya memeriksa).NSStringFromClass()
adalah cara yang tepat untuk melakukannya.Berikut cara yang berbeda untuk melakukannya dengan mengetik yang sedikit kurang:
sumber
+description
, namun, secara teori, ini bukan tujuan+description
, dan metode ini rapuh untuk menentukan nama kelas.Pertimbangkan alternatif ini:
Ini jauh lebih cepat, karena tidak harus mengalokasikan objek NSString dan mengubah ASCII menjadi
NSString
representasi apa pun . Begitulah caraNSStringFromClass()
diterapkan.sumber