標籤:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
ObjC中沒有提供直接的變長參數方法,需要使用C標準庫中的av_list方法,簡單使用如下:
- -(void)somethingForyou:(NSString *)vString,....{
- va_list varList;
- id arg;
- NSMutableArray *argsArray = [[NSMutableArray alloc]inti];
- if(vString){
- va_start(varList,vString);
- while(arg = va_arg(varList,id)){
- [argsArray addObject:arg];
- }
- va_end(varList);
- }
- }
C語言庫檔案
va_list argList:定義一個指向個數可變的參數列表指標;
va_start(argList,statement):使參數列表指標arg_ptr指向函數參數列表中的第一個選擇性參數,說明:argN是位於第一個選擇性參數之前的固定參數,(或者說,最後一個 固定參數;…之前的一個參數),函數參數列表中參數在記憶體中的順序與函式宣告時的順序是一致的。如果有一va函數的聲明是void va_test(char a, char b, char c, …),則它的固定參數依次是a,b,c,最後一個固定參數argN為c,因此就是va_start(arg_ptr, c)。
va_arg(argList,id):返回參數列表中指標arg_ptr所指的參數,傳回型別為type,並使指標arg_ptr指向參數列表中下一個參數。
va_end(arg_ptr):清空參數列表,共置參數指標arg_ptr無效。
典型應用:
在調用的時候要在參數結尾的時候加nil
sqlHelper *sqlCom = [[sqlHelper alloc] init];
[sqlCom somethingForyou:@"INSERT INTO authorInfo(author,age) VALUES (?,?)",@"cheungching",@"25", nil];
Objective-C中實現變長參數問題