首先作為一個coder 很多時候會遇到自己不能解決的問題需要上網查資料,
因為沒有學過多少c語言,所以這方面只能請求網上的前輩,然后就看了關于 “Objective-C可變參數函數”的文章,可惜網上只有轉載,其實就是1篇文章而已。
而且不知道我自己水平沒能理解 還是演示demo就有問題,或者大家都沒發現的一個問題。這里重新按照自己的理解重新寫一個使用oc可變參數函數的方法。本人能力有限,如果遇到錯誤或代碼問題,麻煩大家指出
-(NSArray *)actionUsePic:(id)actionNum, ... {
NSMutableArray *argsArray = [[NSMutableArray alloc] init];
va_list params; //定義一個指向個數可變的參數列表指針;
va_start(params,actionNum);//va_start 得到第一個可變參數地址,
id arg;
if (actionNum) {
//將第一個參數添加到array
id prev = actionNum;
[argsArray addObject:prev];
//va_arg 指向下一個參數地址
//這里是問題的所在 網上的例子,沒有保存第一個參數地址,后邊循環,指針將不會在指向第一個參數
while( (arg = va_arg(params,id)) )
{
if ( arg ){
[argsArray addObject:arg];
}
}
//置空
va_end(params);
//這里循環 將看到所有參數
for (NSNumber *num in argsArray) {
NSLog(@"%d", [num intValue]);
}
}
return argsArray;
}
//調用測試
[self actionUseNum:
[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:4],
nil];
在調用的時候要在參數結尾加nil
關于 va_list va_start va_arg va_end 幾個宏
va_list params; //定義一個指向個數可變的參數列表指針;
va_start(params,actionNum);//va_start 得到第一個可變參數地址,
va_arg(params,id);//指向下一個參數地址
va_end(params); //置空指針