定义具有许多(或无限)参数的方法

时间:2011-08-16 14:52:39

标签: objective-c syntax arguments

initWithObjects:的{​​{1}}方法采用无限的参数列表:

NSArray

如何定义我自己的方法?

NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:(id), ..., nil

1 个答案:

答案 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参数的原因是您知道何时到达列表的末尾。像NSLogprintf这样的函数不要求最后一个参数为nil,因为它可以计算格式字符串(%d%s中的说明符数量等...)