ios 可變參數(va_list,va_start,va_end)

來源:互聯網
上載者:User

原文地址:ios 可變參數(va_list,va_start,va_end)

例如:UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, ...等多個可變參數。

ios實現傳遞不定長的多個參數的方法是使用va_list。va_list是C語言提供的處理變長參數的一種方法。在調用的時候要在參數結尾的時候加nil。va_list的使用需要注意:

(1)首先在函數裡定義va_list型的變數,這個變數是指向參數的指標;

(2)然後用va_start初始化剛定義的va_list變數;

(3)然後用va_arg返回可變的參數,va_arg的第二個參數是你要返回的參數的類型.如果函數有多個可變參數的,依次調用va_arg擷取各個參數;

(4)最後用va_end宏結束可變參數的擷取。

 

 

+ (void)functionName:(NSObject*)string, ...   {      va_list args;      va_start(args, string);      if (string)       {          NSString *otherString;          while ((otherString = va_arg(args, NSString *)))           {              //依次取得所有參數          }      }      va_end(args);  }  

 

 

-(id)initWithViewControllers:(UIViewController<XLSwipeContainerChildItem> *)firstViewController, ...{    self = [self initWithNibName:nil bundle:nil];    if (self)    {        self.navigationBar.tintColor = [UIColor whiteColor];        self.navigationBar.barTintColor = iosLXSystemColor;        self.navigationBar.barStyle = UIBarStyleBlack;                id eachObject;        va_list argumentList;        NSMutableArray * mutableArray = [[NSMutableArray alloc] init];        if (firstViewController)                            // The first argument isn't part of the varargs list,        {                                                   // so we'll handle it separately.            [mutableArray addObject:firstViewController];            va_start(argumentList, firstViewController);    // Start scanning for arguments after firstViewController.            while ((eachObject = va_arg(argumentList, id))) // As many times as we can get an argument of type "id"                [mutableArray addObject:eachObject];        // that isn't nil, add it to self's contents.            va_end(argumentList);        }        XLSwipeContainerController * containerController = [[XLSwipeContainerController alloc] initWithViewControllers:mutableArray];        [self setViewControllers:@[containerController]];                            }    return self;}

 

說明:

va_list args:

//定義一個指向個數可變的參數列表指標;

va_start(args,string)://string為第一個參數,也就是最右邊的已知參數,這裡就是擷取第一個選擇性參數的地址.使參數列表指標指向函數參數列表中的第一個選擇性參數,函數參數列表中參數在記憶體中的順序與函式宣告時的順序是一致的。

va_arg(args,NSString):返回參數列表中指標所指的參數,傳回型別為NSString,並使參數指標指向參數列表中下一個參數。  

a_end(args):清空參數列表,共置參數指標args無效

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.