开始 我  以为 这个 alertView 里面 ...的写法  应该 是一个 普通的数组  然 并没有

分享一篇好文

http://www.tekuba.net/program/290/

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);  }  

说明:

va_list args:

//定义一个指向个数可变的参数列表指针;

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

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

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

在实际使用中 要明确注意 这点:

otherButtonTiles 应该是真正的第一个对象参数,  va_list_args 获取到的 是 其他的剩下的 参数 .

上实战:

转载于:https://www.cnblogs.com/someonelikeyou/p/5019652.html

iOS 发大招 otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法 编写通用类的时候关于可变参数的处理...相关推荐

  1. iOS 11开发教程(七)编写第一个iOS11代码Hello,World

    iOS 11开发教程(七)编写第一个iOS11代码Hello,World 代码就是用来实现某一特定的功能,而用计算机语言编写的命令序列的集合.现在就来通过代码在文本框中实现显示"Hello, ...

  2. iOS 11开发教程(二)编写第一个iOS 11应用

    iOS 11开发教程(二)编写第一个iOS 11应用 编写第一个iOS 11应用 本节将以一个iOS 11应用程序为例,为开发者讲解如何使用Xcode 9.0去创建项目,以及iOS模拟器的一些功能.编 ...

  3. iOS关键字之nullable、nonnull、null_resettable、_Null_unspecified的区别

    nullable.nonnull.null_resettable._Null_unspecified是iOS9.0出现的新的修饰关键词,下面我们来研究一下它们之间的区别. 一 共同点 1.可以进行代码 ...

  4. iOS之深入解析少见却神奇的NSProxy类的多种使用

    一.NSProxy 简介 NSProxy 是一个实现了 NSObject 协议类似于 NSObject 的抽象基类,是根类,与 NSObject 类似: NS_ROOT_CLASS @interfac ...

  5. 一劳永逸,iOS 网页视图控制器通用类封装

    原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...

  6. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射

    一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...

  7. Struts2 之配置文件编写,动作类(01)

    学习路线: 1.struts入门(配置文件编写,动作类的编写及其访问方式) 2.封装数据和访问Servlet的api 3.ognl和值栈 4.拦截器和注解开发 struts2基本概念 Struts2是 ...

  8. 编写矩形类 计算矩形面积

    编写矩形类 计算矩形面积 public class juxing {int a;int b; juxing(int a,int b){System.out.println("矩形面积s=&q ...

  9. C++编写Config类读取配置文件

    老外写的一段代码,在Server中编写这个类读取配置文件比较实用 C++代码   //Config.h #pragma once #include <string> #include &l ...

最新文章

  1. 这个为生信学习打造的开源Linux教程真香!!!
  2. FD.io/VPP — GRE over IPSec
  3. C#中的System.Net.Sockets内部实现原理
  4. 电脑技巧:微软电脑管家测试版发布,赶快来体验一下吧!
  5. 2017.9.25 社交网络 思考记录
  6. window mysql 服务安装
  7. 正在成为史上最全分类 Android 开源大全
  8. 详解Python类定义中的各种方法
  9. Leetcode杯 第三题解答(动态规划)
  10. dpkg: error: dpkg status database is locked by another process 解决方法
  11. mysql 的hash和b tree_mysql索引hash索引和b-tree索引的区别
  12. 推荐系统:基于内容的推荐
  13. Netty实战——Channel、EventLoop和ChannelFuture详解
  14. 韩顺平--Java坦克大战
  15. BGI-College生信入门系列——3、数据库
  16. 《假装情侣匿名聊天室2.0》源码及搭建教程
  17. OSChina 周四乱弹 —— 针对热门上姐弟恋的解答
  18. Java 与 区块链技术_java区块链技术有哪些主要的特点和应用
  19. 学PS平面设计前,你需要先了解这些
  20. Oracle语句详解

热门文章

  1. 7.3 rpm工具用法
  2. nginx_lua_waf安装测试
  3. LINUX系统管理员技术(Admin)-------第三天
  4. SQL SERVER 2008 创建,删除,添加表的主键
  5. 作为数据科学家,我都有哪些弱点
  6. MySQL开发遇到的问题
  7. java中的assert
  8. QTableView中使用Delegate方式来实现对特定列的文本进行换行
  9. 2017最新整理传智播客JavaEE第49期 基础就业班
  10. 每天学习30分钟新知识之html教程1