2012-04-03 1 views
1

Я начинаю изучать, как читать синтаксис сообщений в Objective-C, и хочу укрепить понимание синтаксиса сообщений (я исхожу из фона Java/C#/Ruby).Каков правильный способ прочитать этот оператор Objective-C?

Я в настоящее время рассматривает заявление:

[self.view addSubview:label]; 

«Отправить это сообщение методу addSubView, с ярлыком в качестве аргумента mthod на объект представления о себе.»

(«on» на самом деле не очень хороший способ описать «точечную нотацию» для объектов. Я открыт для лучшего способа ее расшифровки!)

Как вы читаете и интерпретируете вышеуказанное утверждение?

ответ

4

Это фактически вложенное сообщение отправить, Althogh синтаксис точка делает, что сбивает с толку. * различие между сообщения и методы в ObjC также могут быть немного запутанными вначале. Как правило, о них можно говорить как эквивалентные, но строго, сообщение отправляется объекту; сообщение ищется в списке методов объекта, а затем соответствующий способ называется **

Его можно переписать:.

[[self view] addSubview:label]; 

Так сообщение view посылается в self, то приемник. В результате это будет в позиции приемника для другого сообщения, которое равно addSubview:. Вы правы о label, являющемся аргументом addSubview:.

В английском языке, то это: «Добавить label как подвид из self«s view»или„отправить addSubview:, проходя label, в результате отправки view к self“.


* Точка синтаксис предназначен как сахар для доступа к собственности, то есть для использования-акцессоров методов отеля; по умолчанию имя получателя совпадает с именем самого свойства.

** Если метод не найден, объект может выполнять другие действия с сообщением. Единственное реальное отличие, которое делает этот различие в методе/сообщении, заключается в том, что метод, связанный с сообщением, может быть изменен во время выполнения - динамическое связывание.

+0

Если вы хотите понять Objective-C или любой язык, который вы должны - после первого введения - посмотреть на реализацию. Очень важно понять, как это делается, потому что следующая путаница с message/method - это селектор, который на самом деле является строкой c, используемой в качестве ключа в хэш-таблице, для поиска метода, который реагирует на сообщение. – Lothar

+0

(Re: original answer) Спасибо, это было именно то, что я объяснял в глубину, я пытался увеличить свое понимание. Этот сценарий отправки сообщений звучит так же, как vtables из C++; используются ли они для выполнения аналогичных функций? –

+0

@Jimmy: Извините, я не уверен. Я почти ничего не знаю о C++. Многие подробности отправки ObjC объясняются в блоге bbum: http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ –

3

вызывается метод addSubView: на UIView, который является собственностью self (предположительно UIViewController экземпляра или подкласс одного, с этикеткой вара в качестве аргумента, по-видимому, что это UILabel экземпляра.

0

Это утверждение сообщая вид self.view (который является родительским вид «я») в addSubviewlabel.

Смежные вопросы