请考虑以下事项:
- (id)initWithTitle:(NSString *)newTitle
boxOfficeGross:(NSNumber *)newBoxOfficeGross
summary:(NSString *)newSummary;
这是什么意思?我已经猜到它会返回id,并且需要三个参数,但语法的每个部分是什么意思?我来自Ruby / JS背景,我觉得这个语法有点难以理解。
答案 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;