这个语法在Objective-C中是什么意思?

这个语法在Objective-C中是什么意思?,objective-c,Objective C,考虑以下几点: - (id)initWithTitle:(NSString *)newTitle boxOfficeGross:(NSNumber *)newBoxOfficeGross summary:(NSString *)newSummary; 这是什么意思?我猜它返回id,并接受三个参数,但语法的每一部分是什么意思?我来自Ruby/JS背景,发现这种语法有点难掌握。它是一种名为initWithTitle:boxOfficeGross:summary:的

考虑以下几点:

- (id)initWithTitle:(NSString *)newTitle
     boxOfficeGross:(NSNumber *)newBoxOfficeGross
            summary:(NSString *)newSummary;
这是什么意思?我猜它返回id,并接受三个参数,但语法的每一部分是什么意思?我来自Ruby/JS背景,发现这种语法有点难掌握。

它是一种名为initWithTitle:boxOfficeGross:summary:的实例方法(即,不是静态或“类”方法),返回类型为
id
的对象(通用对象)。它有三个参数:字符串对象、数字对象和另一个字符串对象

您可以这样调用它:

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"];
  • -
    表示该方法是实例方法,而不是类方法
  • (id)
    意味着正如您所猜测的,它返回一个
    id
  • initWithTitle:
    boxOfficeGross:
    摘要:
    是方法名称的一部分。在Objective-C中,每个参数通常都有一个关联的方法名称部分。该方法的全名为
    initWithTitle:boxOfficeGross:summary
  • (NSString*)
    等表示参数的类型
  • newTitle
    等是参数的名称

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

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

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

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

起初,这让我感到困惑,但也有好处

此外,括号内每个参数的部分都是参数的对象类型
(NSString*)
是指向
NSString
的指针。如果要传递的对象不是
NSObject
,例如
NSIntger
,则不需要
*
。您只需执行以下操作:
-(id)initWithInteger:(NSIntger)newInteger

Dave在下面的回答是可靠的,不过我想添加一个到Objective-C开发者指南的链接,因为它是对该语言的极好介绍。此外,Objective-C没有命名参数(不是你建议的那样…只是在学习语言时不要犯那么容易犯的错误)!这是objective-c中的函数调用,也称为“向对象传递消息”。您可以像这样将消息传递给对象:
[someobjectprocesspersonwithfirstname:a secondName:b age:34]