@tomzarubin

Для чего в Objective-C в реальной жизни нужны Селекторы(@selector)?

Всем привет.

Изучаю язык, встал вопрос— а для чего нужны селекторы? В реальной жизни.
Ну, т.е., чтобы передать имя метода или проверить поддерживает ли объект метод—с этим всё понятно. Но, скажем, если мы будем вызывать метод у объекта, который его не поддерживает, то получим ошибку 1 раз на этапе компиляции или исполнения. Мы это исправим и её больше не будет. Какой случай должен произойти, чтобы нам понадобилось проверить отвечает ли объект селектору: if ([self respondsToSelector:selector]) ?

Поделитесь, пожалуйста, случаями из практики.
Спасибо.
  • Вопрос задан
  • 3237 просмотров
Пригласить эксперта
Ответы на вопрос 5
morozovdenis
@morozovdenis
1. При использовании протоколов для делегатов. У протокола есть возможность пометить методы @optional и тогда метод необязательно имплементировать в кслассе реализующем протокол. Класс чей это делагат уже проверяет отвечает объект нужному селектору или нет. если отвечает, то вызываем его, если нет, то поведение по умолчанию

2. вы можете передавать target и selector как параметры и использовать вот так:
[target performSelector:selector];или для безопасности проверить что такой селектор есть перед вызовом
if ([target respondsToSelector:selector]) {
     [target performSelector:selector];
}
Ответ написан
Комментировать
@s0L
Далеко не всегда известен класс объекта, чтобы статически определить доступность метода. Повсеместно используется тип id. Еще многие методы в SDK принимают селектор в качестве параметра, это позволяет использовать объекты любых классов. Ну и еще например методы для работы с коллекциями.
Ответ написан
Комментировать
IbrahimKZ
@IbrahimKZ
С помощью селектора можно вызвать метод через определенное время, например
[self performSelector:@selector(someMethod) withObject:nil afterDelay:.5];

Или когда требуется, чтобы ViewController быстрее загружался и не ждал, когда отработают все методы во viewDidLoad или других при загрузке. Сначала показываем, что переход произошел на ViewController, а потом через селекторы можно вызвать наиболее тяжелые методы. В общем, применений можно много найти. Все придет с практикой.
Ответ написан
Комментировать
При поддержке нескольких версий iOS часто возникает необходимость проверять классы на доступность методов.
Ответ написан
Комментировать
@mr_cloud
iOS Developer
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы