函数中使用可变参数
使用NS_REQUIRES_NIL_TERMINATION
检查参数是否以nil
结尾,可变参数非nil
结尾时会造成崩溃。
- (void)sumup:(NSNumber *)num,... NS_REQUIRES_NIL_TERMINATION {
NSNumber *rst = @0;
if (num) {
rst = @(rst.floatValue + num.floatValue);
// 定义一个用于指向个数可变的参数列表指针
va_list args;
// 从num的下一个元素开始
va_start(args, num);
NSNumber *next = nil;
// 循环获取参数列表中的参数
while ((next = va_arg(args, NSNumber *))) {
rst = @(rst.floatValue + next.floatValue);
}
// 清空参数列表,并置参数指针args无效
va_end(args);
}
NSLog(@"%@",num);
}
使用format函数
类似NSString
的xxxWithFormat:
系列方法
宏NS_FORMAT_FUNCTION(1, 2)
表示第一个是format string
,第二个参数开始是对应format string
的参数列表
- (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);
}