詳解Objective-C可變參數函數定義
詳解Objective-C可變參數函數定義是本文有搜介紹的內容,在iPhone中涉及數據庫的操作的時候,在更新操作中要傳遞可變參數,這些可變參數其實就是數據庫語句,這樣在數據庫涉及的過程中,不利于數據和業務的分離,對此,我們可以對其提供的函數再包裝。
首先來看看Objective-C中對可變參數函數的定義、調用,eg:
Objective-C
.h文件
- @interface sqlHelper : NSObject
- {
- }
- -(int) executeInsertWithSql:(NSString *) statement, ...;
- @end
- .m文件
- -(int) executeInsertWithSql:(NSString *) statement, ...
- {
- PLSqliteDatabase* dbPointer = [SqliteDataBase setUp];
- argsArray = [[NSMutableArray alloc] init];
- id arg;
- va_list argList;
- if(statement)
- {
- va_start(argList,statement);
- while (arg = va_arg(argList,id))
- {
- [argsArray addObject:arg];
- }
- va_end(argList);
- }
- BOOL bResult = [dbPointer executeUpdate:statement,[argsArray objectAtIndex:0],[argsArray objectAtIndex:1]];
- return bResult;
- }
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 executeInsertWithSql:@"INSERT INTO authorInfo(author,age) VALUES (?,?)",@"cheungching",@"25", nil];
小結:詳解Objective-C可變參數函數定義的內容介紹完了,希望本文對你有所幫助!