Являются ли селекторы в Objective-C просто еще одним способом отправки сообщения объекту?

Являются ли селекторы в Objective-C просто еще одним способом отправить сообщение объекту? Я действительно не понимаю, почему или как их использовать.

6
задан jscs 15 July 2012 в 21:10
поделиться

2 ответа

Они не являются другим способом послать сообщение объекту, это единственный способ. Например, в [myView setValue:@"foo"], setValue: - это селектор. (Другой, менее удобный способ написать то же самое - objc_msgSend(myView, @selector(setValue:), @"foo").)

Как говорит Ян Генри, вы можете использовать значения SEL для выбора селектора во время выполнения, а не во время компиляции. Это фундаментальная техника в Cocoa; пользовательские интерфейсы обычно связаны с контроллерами с помощью привязок target/action, где target - это объект, а action - селектор. Обычно это задается в nib, но можно сделать и в коде:

[myButton setTarget:myController];
[myButton setAction:@selector(buttonClicked:)]; // Clicking the button will now call [myController buttonClick:myButton].
16
ответ дан 8 December 2019 в 02:12
поделиться

В большинстве случаев да, но вы можете изменить сообщение во время выполнения. Например:

SEL a = [selectorFactory getSelector];
[someOtherObject performSelector:a];

А затем в selectorFactory.getSelector :

if(foo == 1)
    return @selector(thisSelector);
else
    return @selector(thatSelector);

Исходя из C # или другого подобного языка, вы можете использовать это (в общих чертах) для моделирования событий намного проще, чем с использованием NSNotification s. Например, вы можете создать класс кнопки с двумя ivar, target и selector , и заставить кнопку выполнять селектор на цели при нажатии (например).

Однако селекторы - это гораздо больше. Подробнее о них читайте здесь:

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/objectivec/articles/ocSelectors.html

3
ответ дан 8 December 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: