2013-02-26 4 views
1

У меня есть программа Java, которую я конвертирую в цель-c.Точечная запись в объективе-c

В Java I использует точечную нотацию и иметь, например, следующую строку кода:

this.m_root.computeGlobalTransforms(); 

Что вызывает метод, называемый computeGlobalTransforms().

Могу ли я использовать точечную нотацию, как это в Objective-C или мне нужно написать строку как и передать «» m_root как объект:

[self computeGlobalTransforms:m_root]; 

ответ

4

computeGlobalTransforms Если это метод экземпляра объекта класса m_root, и если m_root класс свойство self, то синтаксис:

[self.m_root computeGlobalTransforms]. 

Я предлагаю вам обратиться к Methods and Messaging в Цель обучения -C: Праймер.


computeGlobalTransforms Если это VA_Bone метод, синтаксис будет:

VA_Bone *bone = [[VA_Bone alloc] init]; 
[bone computeGlobalTransforms]; 

Ваш bone переменная является простой локальной переменной, при этом никаких ссылок на self.m_root не требуется.


Кстати, как вопрос соглашению, подчеркивания в середине переменных и имена классов, как правило, не используется. См. Naming Properties and Data Types в Руководстве по кодированию какао . См. Также ссылки на «camel case» в документе Conventions из Программирование с Objective-C.

Таким образом, более обычное соглашение об именах будет VABone для вашего класса. Аналогично вашему оригинальному имуществу m_root, на которое вы ссылались, вы бы (а) дали ему более описательное имя; и (б) использовать случай верблюда. Теперь я не знаю, что должно означать «m» of m_root (что, в одиночку, иллюстрирует проблему), но, скажем так, это были изображения среднего размера, тогда это может быть mediumSizedImagesRoot или что угодно.

+0

У меня возникли проблемы со следующими код: VA_Bone * bone = [[VA_Bone alloc] init]; [self.m_root [bone computeGlobalTransforms]]; Я хочу вызвать метод computeGlobalTransforms, который находится в классе Bone on self.Объект m_root. Это не работает, что я сделал неправильно? – samb90

+0

@ samb90 См. Мой пересмотренный ответ. – Rob

0

Нет, вы не можете, вы можете используйте только Dot.Notation для сеттеров и геттеров для ваших свойств.

+3

это не так - это ужасно стиль, чтобы использовать его для чего-нибудь, кроме свойств, хотя: http://stackoverflow.com/a/2375991/197143 – lxt

3

You can использовать точечную нотацию для вызова методов нулевого параметра. Вы абсолютно не должны. Точечная нотация обрабатывается компилятором, а не временем выполнения - есть очень хороший ответ на аналогичный вопрос, который говорит о том, почему он работает, и почему вы не должны его использовать (... для чего-то другого, кроме сеттеров/геттеров) здесь:

Objective-C dot notation with class methods?

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