查詢后總結:在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無效。