函數(shù)中使用可變參數(shù)
使用NS_REQUIRES_NIL_TERMINATION 檢查參數(shù)是否以nil 結(jié)尾,可變參數(shù)非nil 結(jié)尾時(shí)會(huì)造成崩潰。
- (void)sumup:(NSNumber *)num,... NS_REQUIRES_NIL_TERMINATION {
NSNumber *rst = @0;
if (num) {
rst = @(rst.floatValue + num.floatValue);
// 定義一個(gè)用于指向個(gè)數(shù)可變的參數(shù)列表指針
va_list args;
// 從num的下一個(gè)元素開始
va_start(args, num);
NSNumber *next = nil;
// 循環(huán)獲取參數(shù)列表中的參數(shù)
while ((next = va_arg(args, NSNumber *))) {
rst = @(rst.floatValue + next.floatValue);
}
// 清空參數(shù)列表,并置參數(shù)指針args無(wú)效
va_end(args);
}
NSLog(@"%@",num);
}
使用format函數(shù)
類似NSString 的xxxWithFormat: 系列方法
宏NS_FORMAT_FUNCTION(1, 2) 表示第一個(gè)是format string,第二個(gè)參數(shù)開始是對(duì)應(yīng)format string 的參數(shù)列表
- (void)logFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2) {
va_list args;
va_start(args, format);
NSString *rst = [[NSString alloc] initWithFormat:format arguments:args];
va_end(args);
NSLog(@"%@",rst);
}