Что такое отправитель?

Я не могу найти этот ответ нигде. Что означает то, когда существует параметр отправителя в заголовке метода? Это представляет экземпляр, который назвал его, или метод, который назвал его?

5
задан zoul 16 May 2010 в 05:44
поделиться

3 ответа

В этом нет никакой магии. Вы, вероятно, говорите о методах, связанных с некоторыми элементами пользовательского интерфейса с помощью Interface Builder, не так ли?

- (IBAction) userDidPressButton: (id) sender {...}

IBAction - это макрос, который расширяется до void. Это просто синтаксический сахар, который отмечает методы, которые должны быть доступны в Интерфейсном Разработчике. Теперь, когда вы подключаете этот метод к некоторому элементу интерфейса, например к кнопке, IB вызывает метод addTarget ... для кнопки:

[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...];

И когда вы нажимаете кнопку, он просматривает список действий и запускает userDidPressButton, , выступая в качестве первого аргумента . Это, вероятно, не так уж и полезно для кнопок, но вы также можете использовать тот же механизм для получения событий изменения от ползунка, и в этом случае вы можете использовать аргумент отправителя для получения значения ползунка.

3
ответ дан 14 December 2019 в 04:32
поделиться

Конечно, есть много технических способов описать это, Но в теории «нет-нет» аргумент отправителя, который он передает, - это просто объект GUI, который его передает.

Итак, если вы свяжете этот метод с определенной кнопкой, мы вызовем Button1, отправителем будет Button1, а вместе с ним будет вся информация, доступная для кнопки. Размер, текст и т. Д.

надеюсь, что это было достаточно.

Брайан

1
ответ дан 14 December 2019 в 04:32
поделиться

Что означает наличие параметра отправителя в заголовке метода? Представляет ли он экземпляр, который его вызвал, или метод, который его вызвал?

Посмотрите на тип аргумента. Скорее всего, это id . Это тип указателя на объект. Вы правы, что это экземпляр, отправивший сообщение.

Вы можете передать селектор сообщений в сообщение, но типом для этого будет SEL , а не id . Точно так же вы можете передать в сообщение реализацию метода , но типом для этого будет IMP , а не id .

Методы, которые принимают единственный аргумент отправителя , обычно являются методами действия, обычно идентифицируемыми типом возврата IBAction .Как сказал zoul, IBAction расширяется до void для компилятора, что говорит ему, что метод не возвращает значение. Причина наличия IBAction заключается в том, что Interface Builder ищет методы с возвращаемым типом IBAction и определяет их как действия, к которым вы можете связать элемент управления.

Для получения дополнительной информации о Какао (Mac OS X) см. «Механизм целевого действия» в Руководстве по основам какао и Темы управления и программирования ячеек для какао .
Для получения дополнительной информации о Cocoa Touch (iPhone / iPod touch / iPad) см. «Механизм целевого действия» в справочнике по классу UIControl .

4
ответ дан 14 December 2019 в 04:32
поделиться