形参个数可变, NSNumber和NSValue,获得Class
来源:互联网 发布:haproxy acl 端口复用 编辑:程序博客网 时间:2024/06/04 22:40
形参个数可变
va_list 是在C语言中解决变参问题的一组宏,用于获取不确定个数的参数:用法如下:
(1)首先在函数里定义一具va_list型的变量,这个变量是指向参数的指针;
(2)然后用va_start宏初始化刚定义的va_list变量;
(3)然后用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用va_arg获取各个参数);
(4)最后用va_end宏结束可变参数的获取。
作用:
va_start宏,获取可变参数列表的第一个参数的地址
va_arg宏,获取可变参数的当前参数,返回指定类型并将指针指向下一参数
va_end宏,清空可变参数列表
/** * 形参个数可变 */-(void)studyOne{ //我们经常使用NSLog(NSString * _Nonnull format, ...)函数,这个函数可以传入任意多个参数,这就是形参个数可变的方法.如果在定义方法时,在最后一个形参名增加逗号和三点(,...),则表示该形参可以接受多个参数值. [self test:@"Jack",@"Jenny",@"Roy",@"Vacent",nil];}-(void)test:(NSString *)name,...{ //使用va_list定义一个argList指针变量,该指针变量指向一个可变参数列表 va_list argList; if(name){ NSLog(@"%@",name);//Jack //让argList指向第一个可变参数列表的第一个参数,开始获取变参数列表的第一个参数 va_start(argList, name); //va_arg用于提取argList指针当前指向的参数,并将指针指向下一个参数, arg用于保存当前获取的参数,如果该参数不为nil,进入循环体. NSString *arg=va_arg(argList, id); while (arg) { NSLog(@"%@",arg);//Jenny,Roy, Vacent arg=va_arg(argList, id); } //释放argList指针,结束提取 va_end(argList); }}
NSNumber和NSValue
/** * NSNumber和NSValue */-(void)studyTwo{ //NSNumber和NSValue都是包装类,其中NSValue是NSNumber的父类.NSValue代表一个更加通用的包装类,它可以用于包装单个short,int,long,float,char,指针,对象id等数据项,通过该包装类,就可以把short,int,long,float,char,指针等添加到NSArray和NSSet等集合中.(这些集合要求它们的元素必须是对象). /* NSNumber是更加具体的包装类,主要用于包装c语言的各种数值类型,NSNumber主要的包装类型有如下3种: - (NSNumber *)initWithxxx:该实例方法需要先创建一个NSNumber对象,再使用一个基本类型的值来初始化NSNumber. + (NSNumber *)numberWithxxx:该类方法将直接将特定类型的值包装成为NSNumber. -xxxValue:该实例方法返回该NSNumber对象包装的基本类型的值. 上面3类方法中的xxx可以代表int,char等各种基本类型,具体看头文件. */ NSNumber *num=[NSNumber numberWithInt:20]; NSNumber *doubleNum=[NSNumber numberWithDouble:3.4]; //但是更喜欢使用语法糖,简单,方便,如下: NSNumber *floatNumber=@(3.1); NSLog(@"%@ %@ %@",num,doubleNum,floatNumber);//20 3.4 3.1}
获得Class
/** * 获得Class */-(void)studyThree{ /* 每个类都有一个对应的Class,OC中获得Class通常有如下3中方式: 1):使用 NSClassFromString(NSString * _Nonnull aClassName)函数来获取Class,该函数需要传入字符串参数,该字符串参数的值是某个类的类名. 2):调用某个类的 class 方法老获取该类对应的 Class. 3):调用某个对象的class方法,该方法是NSObject类中的一个方法+ (Class)class,所以 OC 对象都可以调用该方法,该方法将返回对象所属类对应的 Class. */ Class class= NSClassFromString(@"NSDate"); NSLog(@"%@",class); id date=[[class alloc]init]; NSLog(@"%@",date); NSLog(@"%@",[date class]); NSLog(@"%d",class == NSDate.class);}
0 0
- 形参个数可变, NSNumber和NSValue,获得Class
- NSNumber、NSValue和NSNull
- NSNumber,NSValue和NSData
- NSNumber和NSValue
- nsnumber和nsvalue
- NSNumber 和 NSValue
- NSNumber和NSValue
- NSValue和NSNumber和NSString
- 包装类---NSNumber和NSValue
- OC中的NSNumber和NSValue
- NSNumber,NSValue
- NSValue/NSNumber
- NSNumber 和 NSDate 和NSValue 和 NSSet
- NSValue和NSNumber的作用和关系
- NSString和NSMultableString和NSNumber以及NSValue
- iOS中NSNumber,NSValue,NSDate和反射
- 【Foundation】19-NSNumber、NSValue和NSDate
- Foundation框架-05 NSNumber和NSValue
- java12.语言进阶------本地文件操作---文件的创建、删除、重命名
- 杭电1068 (二分图的独立点集)Girls and Boys
- CALayer - 3
- opencv calibration demo 阅读笔记
- BZOJ 3208 花神的秒题计划Ⅰ
- 形参个数可变, NSNumber和NSValue,获得Class
- 银行家算法的数组方式实现
- MyEclipse设置注释格式
- STM8S103编译出错 bad struct/union operand
- Bitmap 二次采样实现
- CES 2016逛展攻略:三大展区万家展台 你不能错过!
- Blob
- MyEclipse 2015 stable2安装注册及配置说明
- IOS生成二维码、扫二维码