va_list va_arg

查询后总结:在UIAlertView的init方法中的otherButtonTitles:(NSString *)otherButtonTitles, …中会遇到可变参数。当重写该方法的时候需要使用到va_list

+ (void)functionName:(NSString*)otherString, ...{
    NSMutableArray *titleList = nil;
    if (otherString) {
        titleList = [[NSMutableArray alloc] init];
        [titleList addObject:otherString];

        va_list list;
        va_start(list, otherString);
        NSString *title = nil;
        while(YES) {
            title = va_arg(list, NSString *);
            if (title == nil) {
                break;//结束
            }
            [titleList addObject:title];
        }
        va_end(list);
    }

}

百科解释:
va_list list:定义一个指向个数可变的参数列表指针;

va_start(list, otherString):otherString为第一个参数,也就是最右边的已知参数,这里就是获取第一个可选参数的地址.使参数列表指针指向函数参数列表中的第一个可选参数,函数参数列表中参数在内存中的顺序与函数声明时的顺序是一致的。

va_arg(list, NSString *):返回参数列表中指针所指的参数,返回类型为NSString,并使参数指针指向参数列表中下一个参数。

a_end(list):清空参数列表,并置参数指针args无效。

你可能感兴趣的:(va_list va_arg)