Objective-C中,定义并使用带有不定参数个数的对象方法与C函数类似,规则上也要求不定参数列表中必须至少要有一个形参,然后参数列表的最后跟省略号表示不定参数。省略号不能放在参数当中部分,只能放在末尾。
比如:
@interface MyObject : NSObject - (void)method:(id)param1 param2:(NSNumber*)param2, ...; @end @implementation MyObject - (void)method:(id)param1 param2:(NSNumber*)param2, ... { va_list ap; // 定位不定形参列表(省略号部分)之前的一个形参 va_start(ap, param2); NSMutableArray<NSNumber*> *arr = [NSMutableArray arrayWithCapacity:10]; // 如果param2参数本身为空,则不去解析不定形参部分 if(param2 != nil) { [arr addObject:param2]; // 这里假定:如果param2不为空,则后续一定跟着至少一个不定实参 NSNumber *num; // 开始迭代 do { num = va_arg(ap, NSNumber*); if(num != nil) [arr addObject:num]; } while(num != nil); } // 迭代结束 va_end(ap); int sum = 0; for(NSNumber* num in arr) sum += num.intValue; NSLog(@"param1 is: %@, and the sum is: %d", param1, sum); } @end // 以下是调用: MyObject *numObj = [[MyObject alloc] init]; [numObj method:@"Hello" param2:nil]; [numObj method:@"Hi" param2:@100, nil]; [numObj method:@"Bye" param2:@200, @100, nil]; [numObj release];
以上代码片段清晰地给出了不定参数方法的定义与调用方法。具体实现规则,各位可以根据自己当前需求来定。