ios开发Objective-C可变参数函数

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



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值