iOS学习笔记(5)形参个数可变的方法_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS学习笔记(5)形参个数可变的方法

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

 2014/7/17 12:02:09  傲云jack  程序员俱乐部  我要评论(0)
  • 摘要:如果在定义方法时,在最后一个形参明后增加逗号和三点(,...),则表明该形参可以接受多个参数值。为了在程序中获取个数可变的形参,需要使用如下关键字·va_list:这是一个类型,用于定义指向可变参数列表的指针变量·va_start:这是一个函数,该函数指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数·va_end:结束处理可变形参,释放指针变量·va_arg:该函数返回获取指针当前指向的参数的值
  • 标签:笔记 方法 学习 iOS 学习笔记

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

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

   · 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讲义(上)》

发表评论
用户名: 匿名