Jawaban:
Ada juga instance pesan statisRespondToSelector: (SEL) selector Anda akan menyebutnya seperti ini:
[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]
atau seperti ini:
[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]
Ini mungkin berguna jika Anda ingin memanggil satu konstruktor atau yang lain tergantung pada ini (maksud saya, sebelum memiliki instance itu sendiri).
Gunakan respondsToSelector:
. Dari dokumentasi :
respondsToSelector:
Mengembalikan nilai Boolean yang menunjukkan apakah penerima mengimplementasikan atau mewarisi metode yang dapat merespons pesan yang ditentukan.
- (BOOL)respondsToSelector:(SEL)aSelector
Parameters
aSelector - Selektor yang mengidentifikasi pesan.Return Value
YES
jika penerima mengimplementasikan atau mewarisi metode yang dapat merespons aSelector , jika tidakNO
.
Anda sedang mencari respondsToSelector: -
if ([foo respondsToSelector: @selector(bar)] {
[foo bar];
}
Seperti yang dikatakan Donal, hal di atas memberi tahu Anda bahwa foo pasti dapat menangani penerimaan pemilih bar. Namun, jika foo adalah proxy yang meneruskan bilah ke beberapa objek yang mendasari yang akan menerima pesan bilah, maka respondsToSelector: akan memberi tahu Anda TIDAK, meskipun pesan tersebut akan diteruskan ke objek yang merespons bilah.
Memeriksa pemilih dengan respondsToSelector biasanya hanya untuk metode delegasi. Anda tidak boleh menggunakan forwardInvocation atau proxy untuk metode delegasi. Jika Anda perlu menggunakan respondsToSelector dalam situasi lain, Anda mungkin ingin memastikan bahwa tidak ada cara yang lebih tepat untuk mendesain program Anda.
- forwardInvocation:
).