iOS学习笔记(5)形参个数可变的方法

摘要:
用于定义指向变量参数列表的指针变量。va_ Start:并让指针变量指向可变形参数列表的第一个参数·va _ End:NSObject//定义一个具有可变数量形式参数的方法-(void)test:@End Varargs。m#import“Varargs.h”@implementationVarargs-(void)测试:{//使用va_list定义argList指针变量。

  如果在定义方法时,在最后一个形参明后增加逗号和三点(,...),则表明该形参可以接受多个参数值。

  为了在程序中获取个数可变的形参,需要使用如下关键字

   · va_list:这是一个类型,用于定义指向可变参数列表的指针变量

   · va_start:这是一个函数,该函数指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数

   · va_end:结束处理可变形参,释放指针变量

   · va_arg:该函数返回获取指针当前指向的参数的值,并将指针移动到指向下一个参数

  例子

  Varargs.h

#import <Foundation/Foundation.h>

@interface Varargs : NSObject

//定义形参个数可变的方法
-(void)test:(NSString *)name,...;

@end

  Varargs.m

#import "Varargs.h"

@implementation Varargs
-(void)test:(NSString *)name,...
{
    // 使用va_list定义一个argList指针变量,该指针变量指向可变参数列表
    va_list argList;
    // 如果为第一个name参数存在,才需要处理后面的参数
    if (name)
    {
        // 由于name参数并不在可变参数列表中,因此先处理name参数
        NSLog(@"%@" , name);
        // 让argList指向第一个可变参数列表的第一个参数,开始提取可变参数列表的参数
        va_start(argList, name);
        // va_arg用于提取argList指针当前指向的参数,并将指针移动到指向下一个参数
        // arg变量用于保存当前获取的参数,如果该参数不为nil,进入循环体
        NSString* arg = va_arg(argList, id);
        while (arg)
        {
            // 打印出每一个参数.
            NSLog(@"%@",arg);
            // 再次提取下一个参数,并将指针移动到指向下一个参数
            arg = va_arg(argList, id);
        }
        // 释放argList指针,结束提取
        va_end(argList);
    }
}
@end

  main函数 

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Varargs* va = [[Varargs alloc] init];
        [va test:@"疯狂iOS讲义"
         , @"疯狂Android讲义", @"疯狂Ajax讲义" , nil];
    }
    return 0;
}

   注意:个数可变的形参只能处于形参列表的最后。一个方法中最多之恩给你保吉安一个长度可变的形参。

引自《疯狂iOS讲义(上)》

免责声明:文章转载自《iOS学习笔记(5)形参个数可变的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iperf/iperf3网络测试工具的安装与使用axios 将post请求数据转为formdata下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

富文本编辑器ueditor支持从word复制粘贴保留格式和图片的插件

tinymce是很优秀的一款富文本编辑器,可以去官网下载。https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用。 http://blog.ncmem.com/wordpress/2019/08/07/umeditor%E7%B2%98%E8%B4%B4word%E5%9B%BE%...

ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】

【前言】 有好些网友问我怎么使用Server发布的地图服务了,其实非常的简单。 我在这里先声明:不提供Server软件,需要的请自行使用互联网搜索资源; 不阐述Server如何发布各各种服务,但是我会给出官方的文档(点我),发布服务其实各种老教程都很多了。 【软件准备】 ·Windows 64位以上的系统,XP可以歇菜了,Server是64位原生软件...

springboot---redis

<!--redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependen...

反向代理软件之HAproxy高级功能及配置

基于cookie的会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址 hash 调度算法对客户端的粒度更精准,但同时也加重了haproxy负载,目前此模式使用较少, 已经被 session共享服务器代替 注意:不支持 tcp mode,使用 http mode 配置选项...

freeswitch官网最新版安装1.10.3

1.系统版本查询:我这里安装的是 debian9 root@qicheng:~# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 9.9 (stretch) Release: 9.9 Codename: str...

iOS 系统二维码扫描(可限制扫描区域)

   使用 AVFoundation系统库来进行二维码扫描并且限制扫描二维码的范围。(因为默认的是全屏扫描)     -(void)beginCode {     //1.摄像头设备     AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVi...