黑马程序员——Foundation框架NSNumber和NSValue的介绍和使用

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


第一讲   NSNumber的介绍和使用


概念:

NSArray\NSDictionary中只能存放OC对象, 不能存放int\float\double等基本数据类
如果真想把基本数据(比如int)放进数组或字典中, 需要先将基本数据类型包装成OC对象


NSNumber可以将基本数据类型包装成对象,这样就可以间接将基本数据类型存进NSArray\NSDictionary中


NSNumber的创建
以前的写法
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;

现在的写法
@10;
@10.5;
@YES;
@(num); // 如果是变量必须加()
@这种写法,只能包装数字,返回值就是NSNumber *类型。

//以前的写法
//把基本数据类型中的int 10包装成对象
NSNumber *n1 = [NSNumber numberWithInt:10];
//创建数组,并且用n1进行初始化
NSArray *arr = [NSArray arrayWithObjects:n1,nil];
NSLog(@"%@",arr);
//现在的写法
NSArray *arr = [NSArray arrayWithObjects:@10,@20,@30,nil];
NSLog(@"%@",arr);
从NSNumber对象中的到基本类型数据

-(char)charValue;
-(int)intValue;
-(long)longValue;

-(double)doubleValue;
-(BOOL)boolValue;
-(NSString *)stringValue;
-(NSComparisonResult)compare:(NSNumber *)otherNumber;
-(BOOL)isEqualToNumber:(NSNumber *)number;


第二讲  NSValue的介绍和使用

概念:
NSValue包装对象指针,CGRect结构体等
一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
为了方便 结构体 和 NSValue 的转换, Foundation提供了以下方法
将结构体包装成NSValue对象 -------> 存储结构体到集合中
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
从NSValue对象取出之前包装的结构体
-(NSPoint)pointValue;
-(NSSize)sizeValue;
-(NSRect)rectValue;
不能直接放NSPoint类型的数据在数组中

+ (NSValue*)valueWithBytes:(constvoid*)value objCType:(constchar*)type;

创建一个NSValue
value:对象地址
objCType:通常是一个用来描述对象类型和大小的字符串,@encode可以接受一个数据类型的名称自动生成一个合适的描述字符串

-(void)getValue:(void*)value(出参);

从接受value的对象中
提取数值
提取的数值,存放在这个指针所指向的内存块里。

typedefstruct{
intyear;
intmonth;
intday;
} Date;
Dated = {2015, 2, 1};
// 将结构体d包装成NSValue对象
NSValue*dValue = [NSValue valueWithBytes:&d objCType:@encode(Date)];
NSArray*array = @[dValue];
// 取出value之前包装的结构体数据
DatenewD;
[dValue getValue:&newD];
分


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值