編寫一些通用類的時候經常會遇到可變參數的處理。就好比 :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];
}