【OC梳理】NSValue 、NSNumber、NSDate、NSException

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 {  
 
}  

你可能感兴趣的:(【OC梳理】NSValue 、NSNumber、NSDate、NSException)