我目前正在从大牧场指南书中学习一些目标.我的理解是,具有多个参数的方法使用冒号来分隔每个参数,但在阅读有关创建数组时,我发现了以下代码片段:
NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday, nil];
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为我认为objective-c方法参数必须在方法名称的一部分前面加上冒号.任何人都可以向我解释一下吗?
这是规则的一个例外; 这通常称为可变方法.如果你看一下NSArray.h中的定义:
+ (instancetype)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
Run Code Online (Sandbox Code Playgroud)
你会看到你可以指定任意数量的参数,只要最后一个参数nil(这称为sentinel).
这节省了开发人员创建大量具有大致相同功能的不同方法,每个方法都接受不同数量的参数.他们这样做了NSObject,你在哪里
- (id)performSelector:(SEL)aSelector withObject:(id)object1;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
Run Code Online (Sandbox Code Playgroud)
(但没有其他方法).