IOS之學(xué)習(xí)筆記六(可變形參)

1、實(shí)現(xiàn)函數(shù)的可變形參

1)、va_list:這是一個(gè)可變類(lèi)型,用于定義指向可變參數(shù)列表的指針變量

2)、va_start:讓argList指向一個(gè)可變參數(shù)列表的第一個(gè)參數(shù)

3)、提取argList當(dāng)前指針指向的參數(shù),并且將指針指向下一個(gè)參數(shù)

4)、釋放argList指針,結(jié)束提取

2、測(cè)試代碼

Args.h

    #ifndef Args_h
    #define Args_h
    #import <Foundation/Foundation.h>
    @interface Args : NSObject
    -(void)test:(id)name, ...;
    @end
    #endif /* Args_h */

Args.m

    #import <Foundation/Foundation.h>
    #import "Args.h"
     
    @implementation Args
    -(void)test:(id)name, ...
    {
        //va_list:這是一個(gè)可變類(lèi)型,用于定義指向可變參數(shù)列表的指針變量
        va_list argList;
        if (name)
        {
            NSLog(@"%@", name);
            //va_start:讓argList指向一個(gè)可變參數(shù)列表的第一個(gè)參數(shù)
            va_start(argList, name);
            //提取argList當(dāng)前指針指向的參數(shù),并且將指針指向下一個(gè)參數(shù)
            NSString *arg = va_arg(argList, id);
            while (arg)
            {
                NSLog(@"%@", arg);
                arg = va_arg(argList, id);
            }
            //釋放argList指針,結(jié)束提取
            va_end(argList);
        }
    }
    @end

main.m

    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    #import "Person.h"
    #import "Apple.h"
    #import "User.h"
    #import "Args.h"
    #import "KVCPerson.h"
     
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            Args *arg = [Args new];
            [arg test:@"chenyu", @"chenxuan", @"chencaifeng", nil];
     
        }
    }

 
3、運(yùn)行結(jié)果

    chenyu
    chenxuan
    chencaifeng

4、對(duì)比總結(jié)

這個(gè)oc里面和c語(yǔ)言里面的實(shí)現(xiàn)差不多如下面的代碼

    #include <stdio.h>
    #include <stdarg.h>
     
    void PrintLines(char *first,...)
    {
        char *str;
        va_list v1;
        str = first;
        va_start(v1,first);
        do
        {
            printf("%s\n",str);
            str=va_arg(v1,char*);
        } while (str != NULL );
        va_end(v1);
    }
     
    int main(int argc, char* argv[])
    {
        PrintLines("First1","Second2","Third3","Fourth4",NULL);
        return 0;
    }






 


作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠(chǎng)商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門(mén)到禿頭 或掃描下面二維碼
零基礎(chǔ)入門(mén)進(jìn)階人工智能(鏈接)