NSValue
NSValue对象是用来存储一个C或者Objective-C数据的简单容器。目的是为了允任意类型的数据都能够被添加到集合里。
NSValue类中定义了初始化和获取value的方法:
/**
NSValue初始化
@param value 值的地址(指针)
@param type 类型
@return 转化后的Value
*/
- (instancetype)initWithBytes:(const void *)value objCType:(const char *)type;
+ (NSValue *)valueWithNonretainedObject:(nullable id)anObject;
+ (NSValue *)valueWithPointer:(nullable const void *)pointer;
/**
获取value
@param value 取出来的value存放的目标地址(指针)
@param size 取值的长度
*/
- (void)getValue:(void *)value;
- (void)getValue:(void *)value size:(NSUInteger)size;
以封包和拆包NSRange举例:
//封包
NSRange range = {1,3};
NSValue *value = [[NSValue alloc]initWithBytes:&range objCType:@encode(NSRange)];
//拆包
NSRange getRange = {0,0};
//一般情况使用[value getValue:&getRange];即可
[value getValue:&getRange size:16];
实际使用时,较常使用的是框架中对于NSValue的扩展
NSNumber
NSNumber,继承自NSValue,扩展了对基本类型的封装,如int、float等。
OC中的集合不允许存入基本类型,可以将其封装成NSNumber存入。
用法如下:
//封包
NSNumber *intNumber = [NSNumber numberWithInt:3];
NSNumber *floatNumber = [NSNumber numberWithFloat:9.8f];
//或者
NSNumber *intNumber = @3; //@(3);
NSNumber *floatNumber = @9.8f; //@(9.8f);
//加入数组中
NSArray *array = @[intNumber,floatNumber];
//解包
int value = [intNumber intValue];
float values = [floatNumber floatValue];
NSString *str = [intNumber stringValue];
NSNumber 可以直接转换成字符串:
NSString *str = [intNumber stringValue];
NSDate
NSDate是OC中操作日期的类。
NSException
NSException用于捕获异常以增加程序的健壮性,用法如下:
//捕获异常
@try {
//do something
}@catch (NSException *exception) {
} @finally {
}