Мне трудно понять сигнатуры методов в Objective-J/Objective-C

Мне трудно понять сигнатуры методов в Objective-J (но в Objective-C должно быть то же самое).

Синтаксис должен быть:

-(return_type)instanceMethod1:(param1_type)param1_varName :(param2_type)param2_varName;

Тип указывается в скобках. Однако я нашел следующую строку кода:

1)

var navigationArea = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 150.0, CGRectGetHeight([contentView bounds]) - 150.0)];

Почему параметры передаются в скобках? Я думал, вы указываете параметры после двоеточия ":".

2)

-(void) importDocumentWithName:(NSString *)name withSpecifiedPreferences:(Preferences *)prefs beforePage:(int)insertPage;

что такое "withSpecifiedPreferences"? Это описание? Какая от этого польза?

Спасибо


person aneuryzm    schedule 18.12.2010    source источник


Ответы (2)


1) показывает сочетание двух стилей, вызываемых методом стиля Objective-C:

[[CPView alloc] initWithFrame:...];

и вызовы функций в стиле C:

CGRectMake(1, 2, 3, 4);

Objective-J — это строгий надмножество JavaScript, что означает, что вы можете использовать синтаксис передачи сообщений в дополнение к синтаксису вызова функций в стиле C, который есть в JavaScript.

В 2) withSpecifiedPreferences: является частью имени метода (или "селектора"), см. "Синтаксис сообщения".

person Georg Fritzsche    schedule 18.12.2010

  1. Потому что CGRectMake() и CGRectGetHeight() — это функции C, а не методы Objective-C или Objective-J. Параметры передаются через запятую в круглых скобках для вызовов функций C.

    Затем результат CGRectMake() передается в качестве параметра методу initWithFrame: класса CPView, который является методом Objective-C.

  2. Что касается вашего второго вопроса, я раньше не видел этот метод, поэтому я не могу точно сказать, для чего используется параметр prefs...

person BoltClock    schedule 18.12.2010