詳解Objective-C可變參數(shù)函數(shù)定義
詳解Objective-C可變參數(shù)函數(shù)定義是本文有搜介紹的內(nèi)容,在iPhone中涉及數(shù)據(jù)庫的操作的時(shí)候,在更新操作中要傳遞可變參數(shù),這些可變參數(shù)其實(shí)就是數(shù)據(jù)庫語句,這樣在數(shù)據(jù)庫涉及的過程中,不利于數(shù)據(jù)和業(yè)務(wù)的分離,對(duì)此,我們可以對(duì)其提供的函數(shù)再包裝。
首先來看看Objective-C中對(duì)可變參數(shù)函數(shù)的定義、調(diào)用,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:定義一個(gè)指向個(gè)數(shù)可變的參數(shù)列表指針;
va_start(argList,statement):使參數(shù)列表指針arg_ptr指向函數(shù)參數(shù)列表中的第一個(gè)可選參數(shù),說明:argN是位于第一個(gè)可選參數(shù)之前的固定參數(shù),(或者說,最后一個(gè) 固定參數(shù);…之前的一個(gè)參數(shù)),函數(shù)參數(shù)列表中參數(shù)在內(nèi)存中的順序與函數(shù)聲明時(shí)的順序是一致的。如果有一va函數(shù)的聲明是void va_test(char a, char b, char c, …),則它的固定參數(shù)依次是a,b,c,最后一個(gè)固定參數(shù)argN為c,因此就是va_start(arg_ptr, c)。
- va_arg(argList,id):返回參數(shù)列表中指針arg_ptr所指的參數(shù),返回類型為type,并使指針arg_ptr指向參數(shù)列表中下一個(gè)參數(shù)。
- va_end(arg_ptr):清空參數(shù)列表,并置參數(shù)指針arg_ptr無效。
在調(diào)用的時(shí)候要在參數(shù)結(jié)尾的時(shí)候加nil
- sqlHelper *sqlCom = [[sqlHelper alloc] init];
- [sqlCom executeInsertWithSql:@"INSERT INTO authorInfo(author,age) VALUES (?,?)",@"cheungching",@"25", nil];
小結(jié):詳解Objective-C可變參數(shù)函數(shù)定義的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!