美文网首页iOS Developer
iOS-不定参详解

iOS-不定参详解

作者: 热干面一元五 | 来源:发表于2016-12-24 18:10 被阅读156次

简单介绍一下这个,下面会有详细的用法和解释、

大致含义 : 一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数。有时会遇到一些算术问题需要用到,比如是计算传入参数的总和,字符串的连接或是其它操作过程,在 Objective-C 里也经常使用,最经典的就是 NSLog( C 为 printf ) ,它可以指定格式的输出,格式化输出的内容.

当然,不定参数,你也可以使用数组代替。废话不多说,直接上代码开干了....

- (void)print:(NSString *)firstArg, ... NS_REQUIRES_NIL_TERMINATION {
    if(firstArg) {
        // 1.定义一个指向个数可变的参数列表指针
        va_list args;
        // 2.用于存放取出的参数
        NSString *arg;
        // 3.初始化变量刚定义的va_list变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
        va_start(args, firstArg);
        // 4.遍历全部参数 va_arg返回可变的参数(a_arg的第二个参数是你要返回的参数的类型)
        while ((arg = va_arg(args, NSString *))) {
            NSLog(@"%@", arg);
        }
        // 清空参数列表,并置参数指针args无效
        va_end(args);
    }
}

下面就是来解释各个方法和参数的含义

  • va_list : 用来保存宏 va_startva_argva_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明 va_list 类型的一个对象
  • va_start : 访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_argva_end使用
  • va_arg : 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用 va_arg 都会修改,用 va_list 声明的对象从而使该对象指向参数列表中的下一个参数
  • va_end : 该宏使程序能够从变长参数列表用宏 va_start 引用的函数中正常返回
  • NS_REQUIRES_NIL_TERMINATION : 是一个宏,用于编译时非nil结尾的检查

使用注意

  • 在可变参数里,所有参数均用逗号隔开
  • 参数结尾必须加上nil,表示参数结束

相关文章

  • iOS-不定参详解

    简单介绍一下这个,下面会有详细的用法和解释、 大致含义 : 一个可变参数函数是指一个函数拥有不定的参数,即为一个函...

  • 随记一些博客的地址

    iOS-原生级别后台下载详解

  • iOS(NSPredicate) 谓词的使用

    参考iOS-谓词的使用详解[https://#]NSPredicate 谓词[https://#] NSPredi...

  • iOS-密码学(三)-DES、AES、RSA、md5详解

    iOS-密码学(二)-DES、AES、RSA、md5详解分析

  • AVPlayer音乐锁屏功能

    [iOS]iOS AudioSession详解 Category选择 听筒扬声器切换iOS- 关于AVAudioS...

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • 不同应用间的跳转

    mark: iOS中scheme详解 iOS-使用URL Schemes,进行应用之间跳转 iOS 设置URL S...

  • 函数

    定义域使用 不定参//...在函数调用可以传递不定量的参数//如果不定参函数传递的参数有多个 不定参要写在其他参数...

  • 日期Date

    iOS-时间与日期详解http://www.jianshu.com/p/f8aab37a27ffhttps://g...

  • ios-坐标系统

    转—ios-坐标系统(详解UIView的frame、bounds跟center属性 1、概要 翻开ios官方开发文...

网友评论

    本文标题:iOS-不定参详解

    本文链接:https://www.haomeiwen.com/subject/xuxrvttx.html