OC方法可变参数

OC可变参数:

- (void)executeSql:(NSString *)sql,... __attribute__((sentinel)){
    
    NSMutableString *result = [NSMutableString stringWithFormat:@"%@",sql];
    
    va_list params;//定义一个指向个数可变的参数列表指针
    va_start(params,sql);//va_start  得到第一个可变参数地址
    NSString *arg;
    while((arg = va_arg(params, NSString *))){ //va_arg 指向下一个参数地址
        if(arg){
            [result appendFormat:@" %@",arg];
        }
    }
    va_end(params);//置空
    
    NSLog(@"%@",result);
    
}

 

调用:
[self executeSql:@"select * from test",@"where" ,@"age =",@"12",nil];

使用__attribute__((sentinel))语法可以告诉编译器这是一个需要哨兵参数的函数。它的作用就是告诉函数没有参数了。这也是为什么ObjC[NSArray arrayWithObjects: ...,nil]最后必须以nil参数结尾的原因

原文地址:https://www.cnblogs.com/HJiang/p/7462207.html