省略号(...)是由C继承;你只能将它用作通话中的最后一个参数(并且在你的例子中你错过了相关的逗号)。所以你的情况,你一定希望:
+ (void)doSomethingToObjects:(id)firstObject, ...;
或者,如果你想计数是明确的,能想到的措辞很好的一种方式:
+ (void)doManyTimes:(NSInteger)numberOfTimes somethingToObjects:(id)firstObject, ...;
然后,您可以使用用于处理椭圆的正常C方法,驻留在stdarg.h中。还有那些here的快速文档,例如用法是:
+ (void)doSomethingToObjects:(id)firstObject, ...
{
id object;
va_list argumentList;
va_start(argumentList, firstObject);
object = firstObject;
while(1)
{
if(!object) break; // we're using 'nil' as a list terminator
[self doSomethingToObject:object];
object = va_arg(argumentList, id);
}
va_end(argumentList);
}
编辑:添加,响应意见。你不能通过省略号将传递给你的各种东西传递给另一个函数,因为C处理函数调用的方式需要省略号(这是Objective-C继承的,尽管不是那么明显)。相反,你倾向于通过va_list。例如。
+ (NSString *)doThis:(SEL)selector makeStringOfThat:(NSString *)format, ...
{
// do this
[self performSelector:selector];
// make string of that...
// get the argument list
va_list argumentList;
va_start(argumentList, format);
// pass it verbatim to a suitable method provided by NSString
NSString *string = [[NSString alloc] initWithFormat:format arguments:argumentList];
// clean up
va_end(argumentList);
// and return, as per the synthetic example
return [string autorelease];
}
是否还有一种方法可以将省略号作为参数,然后传递给另一个方法? – 2011-03-11 09:45:48
@Mats:您通常会获得va_list并将其传递(因此,例如vprintf或NSString -initWithFormat:arguments :)。你不能只传递省略号所描述的任何东西(比如,省略号函数调用另一个),因为C运行时不需要知道有多少东西在那里,因此不能复制它。 – Tommy 2011-03-11 12:11:17
你可以给一个代码示例,将省略号传递给第二个objective-c方法吗? – 2011-03-14 12:17:54