查询后总结:在UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, …中会遇到可变参数。当重写该方法的时候需要使用到va_list
+ (void)functionName:(NSString*)otherString, ...{
NSMutableArray *titleList = nil;
if (otherString) {
titleList = [[NSMutableArray alloc] init];
[titleList addObject:otherString];
va_list list;
va_start(list, otherString);
NSString *title = nil;
while(YES) {
title = va_arg(list, NSString *);
if (title == nil) {
break;//结束
}
[titleList addObject:title];
}
va_end(list);
}
}
百科解释:
va_list list:定义一个指向个数可变的参数列表指针;
va_start(list, otherString):otherString为第一个参数,也就是最右边的已知参数,这里就是获取第一个可选参数的地址.使参数列表指针指向函数参数列表中的第一个可选参数,函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。
va_arg(list, NSString *):返回参数列表中指针所指的参数,返回类型为NSString,并使参数指针指向参数列表中下一个参数。
a_end(list):清空参数列表,并置参数指针args无效。