美文网首页iOS点点滴滴
编写Objective-C可变参数函数

编写Objective-C可变参数函数

作者: 纳木那咔 | 来源:发表于2017-11-23 11:53 被阅读27次

首先作为一个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); //置空指针

相关文章

  • Swift 调用 Objective-C 的可变参数函数

    Swift 调用 Objective-C 的可变参数函数 Swift 调用 Objective-C 的可变参数函数

  • iOS变参函数的实现(Objective-C and Swift

    Objective-C 可变参数的函数在Objective-C中不罕见,像Cocoa中的很多常见的函数都是可变参数...

  • 编写Objective-C可变参数函数

    首先作为一个coder 很多时候会遇到自己不能解决的问题需要上网查资料,因为没有学过多少c语言,所以这方面只能请求...

  • Objective-C可变参数

    可变参数的函数在Objective-C中不罕见,像Cocoa中的很多常见的函数都是可变参数的,如: NSLog(N...

  • 12. 可变参数函数

    12. 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法 如果函数最后一个参数被记作...

  • ★10.关于可变参数模板

    可变参数函数模板 可变参数类模板 可变参数函数模板的使用 转发参数包

  • Go语言可变参数

    可变参数 参数数量可变的函数称为可变参数函数 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符...

  • Go基础语法(四)

    可变参数函数 可变参数函数是一种参数个数可变的函数。 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意...

  • Lua可变参数

    Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用...表示函数有可变的参数。 把可变参数...

  • Python 函数

    调用函数 定义函数 函数的参数必选参数、默认参数、可变参数、关键字参数、命名关键字参数 位置参数 默认参数 可变参...

网友评论

    本文标题:编写Objective-C可变参数函数

    本文链接:https://www.haomeiwen.com/subject/krczvxtx.html