IOS之学习笔记六(可变形参)
生活随笔
收集整理的這篇文章主要介紹了
IOS之学习笔记六(可变形参)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、實現函數的可變形參
?
1)、va_list:這是一個可變類型,用于定義指向可變參數列表的指針變量
2)、va_start:讓argList指向一個可變參數列表的第一個參數
3)、提取argList當前指針指向的參數,并且將指針指向下一個參數
4)、釋放argList指針,結束提取
?
?
?
2、測試代碼
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:這是一個可變類型,用于定義指向可變參數列表的指針變量va_list argList;if (name){NSLog(@"%@", name);//va_start:讓argList指向一個可變參數列表的第一個參數va_start(argList, name);//提取argList當前指針指向的參數,并且將指針指向下一個參數NSString *arg = va_arg(argList, id);while (arg){NSLog(@"%@", arg);arg = va_arg(argList, id);}//釋放argList指針,結束提取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、運行結果
chenyu chenxuan chencaifeng?
?
?
?
4、對比總結
這個oc里面和c語言里面的實現差不多如下面的代碼
#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; }?
?
?
總結
以上是生活随笔為你收集整理的IOS之学习笔记六(可变形参)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS之学习笔记五(合成存取方法)
- 下一篇: IOS学习笔记七之KVC和Key路径