这个语法在Objective-C中意味着什么?

时间:2010-01-28 18:15:29

标签: objective-c

请考虑以下事项:

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

这是什么意思?我已经猜到它会返回id,并且需要三个参数,但语法的每个部分是什么意思?我来自Ruby / JS背景,我觉得这个语法有点难以理解。

3 个答案:

答案 0 :(得分: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"];

答案 1 :(得分:4)

  • -表示该方法是实例方法,而不是类方法
  • (id)表示它会返回id,正如您所推测的那样。
  • initWithTitle:boxOfficeGross:summary:是方法名称的一部分。在Objective-C中,每个参数通常都有一个关联的方法名称部分。该方法的完整名称为initWithTitle:boxOfficeGross:summary
  • (NSString *)等表示参数的类型。
  • newTitle等是参数的名称。

答案 2 :(得分:0)

-指定实例方法,而如果它是+则指定类方法。

(id)是方法将返回的内容,它只是对对象的引用。

该行的其余部分显示参数。在调用函数时,您在:之前写出每个参数的一部分,例如[class initWithTitle:@"my title"];

每个参数有两个名称的原因是因为方法本身将通过:之后的任何内容引用变量,因此标题将为newTitle

起初这让我感到困惑,但它有其优点。

此外,括号内每个参数的部分是参数的对象类型。 (NSString *)是指向NSString的指针。如果您传递的内容不是NSObject,例如NSIntger,则不需要*。你只需这样做: -(id)initWithInteger:(NSIntger)newInteger;