论坛首页 移动开发技术论坛

Objective-C可变参数函数

浏览 6543 次
精华帖 (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); //置空指针

   发表时间:2012-10-09  
假如我写了一个方法:

-(void)pageList:(NSString*)str putAndName:(NSString*)name,...{
    NSArray *arr=这里我如何调用actionUsePic方法;
   

}
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics