2010-01-28 3 views
4

Рассмотрим следующий пример:Что означает этот синтаксис в Objective-C?

- (id)initWithTitle:(NSString *)newTitle 
    boxOfficeGross:(NSNumber *)newBoxOfficeGross 
      summary:(NSString *)newSummary; 

Что это значит? Я догадался, что он возвращает id и принимает три параметра, но что означает каждая часть синтаксиса? Я исхожу из фона Ruby/JS, и я нахожу этот синтаксис немного трудным для понимания.

+0

Ответ Dave ниже твердый, хотя я бы добавил ссылку на руководство разработчика Objective-C, поскольку это отличное введение в язык. Кроме того, Objective-C ** не имеет названных аргументов ** (не то, что вы предположили, что это так ... просто не делайте так легко ошибочно, когда вы изучаете язык)! – bbum

+0

это вызов функции в объекте-c, также называемый «передача сообщения объекту».Вы передаете сообщение этому объекту следующим образом: '[someobject processPersonWithFirstName: aName: b age: 34];' – stefanB

+0

bbum - у вас есть URL? –

ответ

5

Это метод экземпляра (то есть не статический или «класс»), который называется initWithTitle:boxOfficeGross:summary:, который возвращает объект типа id (общий объект). Он принимает три параметра: объект String, объект Number и другой объект String.

вы вызываете это следующим образом:

NSNumber * gross = [NSNumber numberWithInteger:1878025999] 
Movie * avatar = [[Movie alloc] initWithTitle:@"Avatar" 
           boxOfficeGross:gross 
             summary:@"Pocahontas in the 22nd century"]; 
//or you can do it all on one line, like so: 
Movie * avatar = [[Movie alloc] initWithTitle:@"Avatar" boxOfficeGross:gross summary:@"Pocahontas in the 22nd century"]; 
4
  • - означает, что метод является методом экземпляра, а не метод класса.
  • (id) означает, что он возвращает id, как вы догадались.
  • initWithTitle:, boxOfficeGross: и summary: являются частью имени метода. В Objective-C каждый параметр обычно имеет связанную с ним часть имени метода. Полное имя метода: initWithTitle:boxOfficeGross:summary.
  • (NSString *) и т. Д., Обозначают тип параметра.
  • newTitle и т. Д. - это имя параметра.
0

- обозначает метод экземпляра, тогда как если бы это был +, это был бы метод класса.

(id) - это то, что метод вернет, что является просто ссылкой на объект.

Остальная часть строки показывает параметры. При вызове функции, вы выписывать часть каждого параметра перед :, такими как [class initWithTitle:@"my title"];

Причина, почему два названия для каждого параметра, потому что сам метод будет относиться к переменному, все, что после того, как : , поэтому заголовок будет newTitle.

Сначала это меня сбивало с толку, но есть преимущества.

Кроме того, части каждого параметра в скобках являются типом объекта параметра. (NSString *) является указателем на NSString. Если вы должны были передать что-то, что не было NSObject, например NSIntger, вам не понадобится *. Вы бы просто сделали: -(id)initWithInteger:(NSIntger)newInteger;

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