iOS可变参数(不定参数的用法)

之前看到UIALertView,在传递按钮的个数时,...NS_REQUIRES_NIL_TERMINATION,只知道这个可以传入多个参数,没有仔细看这个传入的参数是怎么拿到的。


- (instancetype)initWithTitle:(nullable NSString *)title message:(nullable NSString *)message delegate:(nullable id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(nullable NSString *)cancelButtonTit

var_list是C语言中处理变参问题的一种方式,主要涉及到几个宏,

  • var_list,主要是存储多参的信息,比如,参数的起始地址
  • va_start,主要是用于初始化var_list
  • va_arg,主要是用来获取参数列表的参数
  • va_end,结束参数获取
/*iOS实现传递不定长的多个参数的方法是使用va_list。va_list是C语言提供的处理变长参数的一种方法。在调用的时候要在参 数结尾的时候加nil
 va_list的使用需要注意:
 1.首先在函数里定义va_list型的变量,这个变量是指向参数的指针;
 2.然后用va_start初始化刚定义的va_list变量;
 3.然后用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型.如果函数有多个可变参数的,依次调用va_arg获取各个参数;
 4.最后用va_end宏结束可变参数的获取
 
 NS_REQUIRES_NIL_TERMINATION,是一个宏,用于编译时非nil结尾的检查。 调用时要以nil结尾,否则会崩溃。
 
 */
-(void)testMoreCanshu:(NSString*)str,...NS_REQUIRES_NIL_TERMINATION{
    //va_list 是一个指针变量  本质上是一个指针
    va_list arg_lists;
    //初始化 va_list
    va_start(arg_lists, str);
    
    NSString * obj = nil;
    //va_arg(arg_lists, NSString*)用户来获取值
    while((obj=va_arg(arg_lists, NSString*))){
        NSLog(@"%@",obj);
    };
    //结束参数获取
    va_end(arg_lists);
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self testMoreCanshu:@"bac",@"2", nil];
   
}

参考学习博客:

https://www.jianshu.com/p/4259ee5f6eea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值