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参数结尾的原因
浙公网安备 33010602011771号