iOS自定义多参数类型方法
来源:互联网 发布:mac哪里设置环境变量 编辑:程序博客网 时间:2024/05/21 17:53
前几天做自定义UIAlertView的时候,想仿造系统自带的初始化方法做一个AlertView,里面涉及到不确定多参数的设置和使用问题。这里做一下记录。
我自定义了一个方法:
- (instancetype)initWithTitle:(NSString*)title message:(NSString*)message delegate:(id)delegate cancelButtonTitle:(NSString*)cancelButtonTitle otherButtonTitles:(NSString*)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;
实现部分如下:
- (instancetype)initWithTitle:(NSString*)title message:(NSString*)message delegate:(id)delegate cancelButtonTitle:(NSString*)cancelButtonTitle otherButtonTitles:(NSString*)otherButtonTitles, ...{ self = [super initWithFrame:CGRectMake(0, 0, JK_SCREEN_WIDTH, JK_SCREEN_HEIGHT)]; if (self) { self.delegate = delegate; self.title = title; self.message = message; self.cancelButtonTitle = cancelButtonTitle; } if (otherButtonTitles) { [self.otherButtonTitles addObject:otherButtonTitles]; va_list argList; //定义一个 va_list 指针来访问参数表 va_start(argList, otherButtonTitles); //初始化 va_list,让它指向第一个变参,otherButtonTitles 这里是第一个参数,虽然加了s,它不是数组。 id arg; while ((arg = va_arg(argList, id))) //调用 va_arg 依次取出 参数,它会自带指向下一个参数 { [self.otherButtonTitles addObject:arg]; } va_end(argList); // 收尾,记得关闭关闭 va_list } return self;}
百度百科里的使用步骤是这样的。
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
(2)然后用VA_START宏初始化刚定义的VA_LIST变量;
(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
(4)最后用VA_END宏结束可变参数的获取。
注意:(1)可变参数的类型和个数完全由程序代码控制,它并不能智能地识别不同参数的个数和类型;
(2)如果我们不需要一一详解每个参数,只需要将可变列表拷贝至某个缓冲,可用vsprintf函数;
(3)因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利.不利于我们写出高质量的代码;
百度词条地址:http://baike.baidu.com/view/1213054.htm 0 0
- iOS自定义多参数类型方法
- iOS自定义多参数类型方法
- 多参数返回类型_自定义tuple
- java自定义类型参数的方法时出现NoSuchMethodException
- XFire实现自定义类型参数传递和调用返回自定义类型方法
- ios学习之 方法中的参数为引用类型
- iOS 多参数方法实现
- 自定义泛型方法及其应用和类型参数的类型推断
- 获得方法参数类型
- springmvc自定义参数类型绑定
- Mybatis多参数查询方法,多个参数类型相同
- Java方法参数太多怎么办—Part 1—自定义类型
- Java方法参数太多怎么办—Part 1—自定义类型
- Java方法参数太多怎么办—Part 1—自定义类型
- 用反射调用方法(带自定义类型的参数)问题
- iOS方法中加闭包参数
- ios 自定义控件 方法
- ios自定义构造方法
- SWT 托盘
- 用 Java 实现断点续传 (HTTP)
- openlayers 控件
- Java 设计模式之策略模式
- Gridview里的全选
- iOS自定义多参数类型方法
- LoadRunner26612错误
- Storage Options
- 怎么把PDF格式文件转换成PPT格式
- log4j与log4j.properties的配置说明
- MEX文件编译
- java io 结构
- LeetCode--Convert Sorted Array to Binary Search Tree(平衡二叉搜索树)
- 关于Android项目打包过程中因为id重名导致的无法打包的问题