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)階人工智能(鏈接)