码迷,mamicode.com
首页 > 其他好文 > 详细

Objective C中定义可变参函数

时间:2015-04-19 16:05:37      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

Objective C中有很多不定参函数,例如NSLog(format, arg1, arg2),还有字符串或数组在构造时所用的[NSString stringWithFormat: format, arg1, arg2, arg3],它们的方法原型分别是:

 

FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);

+ (id)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);

 

现在来看一个实际的例子:

 

Ios代码 

- (void) doLog:(NSString *)formatStr, ... {  

    if (!formatStr)  

        return;  

    va_list arglist;  

   va_start(arglist, formatStr);  

    NSString *outStr = [[[NSString alloc] initWithFormat:formatStr arguments:arglist] autorelease];  

    va_end(arglist);  

    NSLog(@"%@", outStr);  

}  

 

由此可见,va_list、va_start、va_end正是处理不定参数的关键。

 

接下来,再来看一个例子:

 

Ios代码 

- (void) doLog:(NSString *)formatStr, ... {  

    if (!formatStr)  

       return;  

   va_list arglist;  

   va_start(arglist, formatStr);  

    id arg;  

   while(arg = va_arg(arglist, id)) {  

        if (arg)  

            NSLog(@"%@", arg);  

    }  

    va_end(arglist);  

}  

 

va_list argList:定义一个指向个数可变的参数列表指针。

va_start(argList, statement):使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数。

argN是位于第一个可选参数之前的固定参数,或者说是最后一个固定参数,即…之前的那个参数,函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。如果有一个va函数的声明是void va_test(char a, char b, char c, …),则它的固定参数依次是a,b,c,最后一个固定参数argN为c,因此就是va_start(arg_ptr, c)。

va_arg(argList, id):返回参数列表中指针arg_ptr所指的参数,返回类型为type,并使指针arg_ptr指向参数列表中的下一个参数。

va_end(arg_ptr):清空参数列表,并置参数指针arg_ptr无效。

 

在调用的时候要在参数结尾加上nil,最后一个nil能让va_arg取参数时碰到nil则断定为NO,终止循环。

Objective C中定义可变参函数

标签:

原文地址:http://www.cnblogs.com/selfing/p/4439209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!