initWithObjects:
的{{1}}方法采用无限的参数列表:
NSArray
如何定义我自己的方法?
NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:(id), ..., nil
答案 0 :(得分:20)
“无限参数”是变量参数,使用它们的方法称为可变参数方法。您可以使用与NSMutableArray
示例相同的方式定义它们。 Apple的Technical Q&A有一个如何实现它的例子。
- (void) appendObjects:(id) firstObject, ...
{
id eachObject;
va_list argumentList;
if (firstObject) // The first argument isn't part of the varargs list,
{ // so we'll handle it separately.
[self addObject: firstObject];
va_start(argumentList, firstObject); // Start scanning for arguments after firstObject.
while ((eachObject = va_arg(argumentList, id))) // As many times as we can get an argument of type "id"
[self addObject: eachObject]; // that isn't nil, add it to self's contents.
va_end(argumentList);
}
}
nil
参数的原因是您知道何时到达列表的末尾。像NSLog
和printf
这样的函数不要求最后一个参数为nil
,因为它可以计算格式字符串(%d
,%s
中的说明符数量等...)