浏览 6527 次
锁定老帖子 主题:Objective-C可变参数函数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-20
首先作为一个coder 很多时候会遇到自己不能解决的问题需要上网查资料, 因为没有学过多少c语言,所以这方面只能请求网上的前辈,然后就看了关于 “Objective-C可变参数函数”的文章,可惜网上只有转载,其实就是1篇文章而已。 而且不知道我自己水平没能理解 还是演示demo就有问题,或者大家都没发现的一个问题。这里重新按照自己的理解重新写一个使用oc可变参数函数的方法。本人能力有限,如果遇到错误或代码问题,麻烦大家指出
-(NSArray *)actionUsePic:(id)actionNum, ... { NSMutableArray *argsArray = [[NSMutableArray alloc] init]; va_list params; //定义一个指向个数可变的参数列表指针; va_start(params,actionNum);//va_start 得到第一个可变参数地址, id arg; if (actionNum) { //将第一个参数添加到array id prev = actionNum; [argsArray addObject:prev]; //va_arg 指向下一个参数地址 //这里是问题的所在 网上的例子,没有保存第一个参数地址,后边循环,指针将不会在指向第一个参数 while( (arg = va_arg(params,id)) ) { if ( arg ){ [argsArray addObject:arg]; } } //置空 va_end(params); //这里循环 将看到所有参数 for (NSNumber *num in argsArray) { NSLog(@"%d", [num intValue]); } } return argsArray; }
//调用测试 [self actionUseNum: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4], nil];
在调用的时候要在参数结尾加nil 关于 va_list va_start va_arg va_end 几个宏
va_list params; //定义一个指向个数可变的参数列表指针;
va_start(params,actionNum);//va_start 得到第一个可变参数地址,
va_arg(params,id);//指向下一个参数地址
va_end(params); //置空指针 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-09
假如我写了一个方法:
-(void)pageList:(NSString*)str putAndName:(NSString*)name,...{ NSArray *arr=这里我如何调用actionUsePic方法; } |
|
返回顶楼 | |