Это фактически вложенное сообщение отправить, Althogh синтаксис точка делает, что сбивает с толку. * различие между сообщения и методы в ObjC также могут быть немного запутанными вначале. Как правило, о них можно говорить как эквивалентные, но строго, сообщение отправляется объекту; сообщение ищется в списке методов объекта, а затем соответствующий способ называется **
Его можно переписать:.
[[self view] addSubview:label];
Так сообщение view
посылается в self
, то приемник. В результате это будет в позиции приемника для другого сообщения, которое равно addSubview:
. Вы правы о label
, являющемся аргументом addSubview:
.
В английском языке, то это: «Добавить label
как подвид из self
«s view
»или„отправить addSubview:
, проходя label
, в результате отправки view
к self
“.
* Точка синтаксис предназначен как сахар для доступа к собственности, то есть для использования-акцессоров методов отеля; по умолчанию имя получателя совпадает с именем самого свойства.
** Если метод не найден, объект может выполнять другие действия с сообщением. Единственное реальное отличие, которое делает этот различие в методе/сообщении, заключается в том, что метод, связанный с сообщением, может быть изменен во время выполнения - динамическое связывание.
Если вы хотите понять Objective-C или любой язык, который вы должны - после первого введения - посмотреть на реализацию. Очень важно понять, как это делается, потому что следующая путаница с message/method - это селектор, который на самом деле является строкой c, используемой в качестве ключа в хэш-таблице, для поиска метода, который реагирует на сообщение. – Lothar
(Re: original answer) Спасибо, это было именно то, что я объяснял в глубину, я пытался увеличить свое понимание. Этот сценарий отправки сообщений звучит так же, как vtables из C++; используются ли они для выполнения аналогичных функций? –
@Jimmy: Извините, я не уверен. Я почти ничего не знаю о C++. Многие подробности отправки ObjC объясняются в блоге bbum: http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ –