Objective-C实现变参函数

原文:http://www.tanhao.me/pieces/1104.html
 
NSLog ( NSString *format, ...)
 
+ ( id )arrayWithObjects:( id )firstObj, ...
 
+ ( id )dictionaryWithObjectsAndKeys:( id )firstObject , ...
 
需要用到C语言中关于变参的一组宏:va_start,va_arg,va_end
 
函数调用:[self method:@"1",@"2",@"3",nil];像大多数变参函数一样,未尾一定要加上nil,因为这一组宏都没有提供对参数个数的检测,当然你 可以会问为何NSLog的参数中我们都不用在末尾添加nil的参数呢,那是因为NSLog的第一个参数是一个格式化字符串,通过这个字条串就能获得后面的 参数个数,所以如果你的函数还能有其它的参数能够显式的指出变参个数,当然你也可以书写(但在函数体中需要修改为按已知个数调用va_arg)。
 
 
 1 - (void)method:(NSString *)value,...

 2 {

 3     //指向变参的指针

 4     va_list list;

 5     //使用第一个参数来初使化list指针

 6     va_start(list, value);

 7     while (YES)

 8     {

 9         //返回可变参数,va_arg第二个参数为可变参数类型,如果有多个可变参数,依次调用可获取各个参数

10         NSString *string = va_arg(list, NSString*);

11         if (!string) {

12             break;

13         }

14         NSLog(@"%@",string);

15     }

16     //结束可变参数的获取

17     va_end(list);

18 }

你可能感兴趣的:(Objective-C)