Я не могу найти этот ответ нигде. Что означает то, когда существует параметр отправителя в заголовке метода? Это представляет экземпляр, который назвал его, или метод, который назвал его?
В этом нет никакой магии. Вы, вероятно, говорите о методах, связанных с некоторыми элементами пользовательского интерфейса с помощью Interface Builder, не так ли?
- (IBAction) userDidPressButton: (id) sender {...}
IBAction - это макрос, который расширяется до void. Это просто синтаксический сахар, который отмечает методы, которые должны быть доступны в Интерфейсном Разработчике. Теперь, когда вы подключаете этот метод к некоторому элементу интерфейса, например к кнопке, IB вызывает метод addTarget ... для кнопки:
[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...];
И когда вы нажимаете кнопку, он просматривает список действий и запускает userDidPressButton, , выступая в качестве первого аргумента . Это, вероятно, не так уж и полезно для кнопок, но вы также можете использовать тот же механизм для получения событий изменения от ползунка, и в этом случае вы можете использовать аргумент отправителя для получения значения ползунка.
Конечно, есть много технических способов описать это, Но в теории «нет-нет» аргумент отправителя, который он передает, - это просто объект GUI, который его передает.
Итак, если вы свяжете этот метод с определенной кнопкой, мы вызовем Button1, отправителем будет Button1, а вместе с ним будет вся информация, доступная для кнопки. Размер, текст и т. Д.
надеюсь, что это было достаточно.
Брайан
Что означает наличие параметра отправителя в заголовке метода? Представляет ли он экземпляр, который его вызвал, или метод, который его вызвал?
Посмотрите на тип аргумента. Скорее всего, это id
. Это тип указателя на объект. Вы правы, что это экземпляр, отправивший сообщение.
Вы можете передать селектор сообщений в сообщение, но типом для этого будет SEL
, а не id
. Точно так же вы можете передать в сообщение реализацию метода , но типом для этого будет IMP
, а не id
.
Методы, которые принимают единственный аргумент отправителя
, обычно являются методами действия, обычно идентифицируемыми типом возврата IBAction
.Как сказал zoul, IBAction
расширяется до void
для компилятора, что говорит ему, что метод не возвращает значение. Причина наличия IBAction
заключается в том, что Interface Builder ищет методы с возвращаемым типом IBAction
и определяет их как действия, к которым вы можете связать элемент управления.
Для получения дополнительной информации о Какао (Mac OS X) см. «Механизм целевого действия» в Руководстве по основам какао и Темы управления и программирования ячеек для какао .
Для получения дополнительной информации о Cocoa Touch (iPhone / iPod touch / iPad) см. «Механизм целевого действия» в справочнике по классу UIControl .