我目前正在从大型牧场指南中学习一些Objective-C。我的理解是,具有多个参数的方法使用冒号分隔每个参数,但是在阅读有关创建数组的内容时,我发现了以下代码片段:
NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday, nil];
这让我感到困惑,因为我认为Objective-C方法参数必须在每个方法名称之前加上一部分方法名称以及冒号。有人可以向我解释吗?
这是规则的例外;这通常称为可变参数方法。如果您查看NSArray.h中的定义:
+ (instancetype)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
您会看到可以指定任意数量的参数,只要最后一个参数是这样nil
(这被称为sentinel)。
这样可以避免开发人员创建大量功能大致相同的不同方法,每个方法都接受不同数量的参数。他们这样做是NSObject
在你有的地方
- (id)performSelector:(SEL)aSelector withObject:(id)object1;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
(但没有其他方法)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句