代码分析之va_list及UIAlertController的封
2015-11-12 本文已影响72人
小雨hahaha
va_list是在C语言中解决变参问题的一组宏,长用来出来不定参数
在iOS中也可使用,使用场景一般是参数为如下

(1)va_start宏
获取可变参数列表的第一个参数的地址va_start(ap, param),ap是类型为va_list的指针,param是可变参数最左边的参数
(2)va_arg宏
获取可变参数当前的参数,返回指定类型并将指针指向下一个参数va_arg(ap, type),ap是类型为va_list的指针,type是当前参数的类型
(3)va_end宏
清空va_list可变参数列表va_end(ap),ap是类型为va_list的指针
来一个例子,使用va_list对UIAlertController进行封装
(1)写一个block,供用户传入,处理消息关闭事件
typedef void (^MDFUIAlertViewOnDismiss)(NSInteger index);
(2)封装的方法名,展示一个消息框,关闭时执行回调,变长参数,0~N个字符串加一个结束符(nil或block),block类型为MDFUIAlertViewOnDismiss


注意到有个推出模态控制器,为了外面的使用,我们使用栈顶的视图控制器来推

使用的时候如下
