编写一些通用类的时候经常会遇到可变参数的处理。就好比 :UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, ...可变参数
iOS实现传递不定长的多个参数的方法是使用va_list。va_list是C语言提供的处理变长参数的一种方法。在调用的时候要在参数结尾的时候加nil。使用示范:
- (instancetype)initWithTitle:(NSString *)title otherButtonTitles:(NSString *)otherButtonTitles, ... {
NSMutableArray *newArray = nil;
if (otherButtonTitles) {
//定义一个指向个数可变的参数列表指针
va_list args;
//让指针指向传参首地址
va_start(args, otherButtonTitles);
newArray = [[NSMutableArray alloc] initWithObjects:otherButtonTitles, nil];
id obj;
//逐一获取指针内的值
while((obj = va_arg(args, id)) != nil) {
[newArray addObject:obj];
}
//释放指针
va_end(args);
}
return [self initWithTitle:title otherButtonTitles:newArray];
}