Відповіді:
Є також статичні повідомлення екземплярівRespondToSelector: (SEL) Вибірник Ви б назвали це так:
[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]
або так:
[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]
Це може бути корисно, якщо ви хочете зателефонувати на один конструктор чи інший залежно від цього (я маю на увазі, перш ніж мати сам екземпляр).
Використовуйте respondsToSelector:
. З документації :
respoToSelector:
Повертає булеве значення, яке вказує, реалізує чи успадковує приймач метод, який може відповісти на вказане повідомлення.
- (BOOL)respondsToSelector:(SEL)aSelector
Параметри
aSelector - селектор, який ідентифікує повідомлення.Повернене значення,
YES
якщо приймач реалізує або успадковує метод, який може відповісти на aSelector , в іншому випадкуNO
.
Ви шукаєте відповідіToSelector: -
if ([foo respondsToSelector: @selector(bar)] {
[foo bar];
}
Як говорить Дональ, вище сказане вам говорить, що foo може точно впоратися з отриманням селектора бруска. Однак, якщо foo - це проксі-сервер, який пересилає смужку до якогось основного об'єкта, який отримає смугове повідомлення, тоді responseToSelector: скаже вам "НІ", навіть якщо повідомлення буде перенаправлено об'єкту, який відповідає на бар.
Перевірка селекторів respondsToSelector, як правило, лише для делегатних методів. Ви не повинні використовувати forwardInvocation або проксі-сервери для делегатних методів. Якщо вам потрібно використовувати respondsToSelector в інших ситуаціях, ви можете переконатися, що немає більш підходящого способу розробки вашої програми.
- forwardInvocation:
).