NSNumber是用来包装基本数据类型
包装
其实在创建NSNumber的时候,我们就是已经将基本数据类型包装起来了
NSNumber *intNumber = [NSNumber numberWithInt:1];
NSNumber *longNumber = [NSNumber numberWithLong:100000];
NSNumber *floatNumber = [NSNumber numberWithFloat:10.5];
NSNumber *boolNumber = [NSNumber numberWithBool:true];
NSNumber *charNumber = [NSNumber numberWithChar:'A'];
.........
NSArray *array = @[intNumber ,longNumber,floatNumber,boolNumber,charNumber];
NSLog(@"%@",array);
解包装
NSInteger intValue = [intNumber intValue];
float floatValue = [floatNumber floatValue];
......
NSNumber简便的语法
NSNumber *intNumber1 = @12;
NSNumber *floatNumber1= @3.14;
NSNumber *charNumber1 = @'a';
NSNumber *boolNumber1 = @YES;
......
NSValue
NSValue是NSNumber的父类 可以对稍微复杂一些的结构体进行封包 但是其在项目开发过程当中并不是很常见
例如我们自定义一个结构体并把它进行包装/解包装
NSRange range = {3, 10};
NSValue *value = [NSValue valueWithRange:range];
......
除此之外NSValue一些常见的用法:
解包装
NSRange range1 = [value rangeValue];
CGPoint point = [value pointValue];
CGRect rect = [value rectValue];
......
自定义结构体包装/解包装
很明显我们利用NSValue可以对一些结构体对象进行包装/解包装,但是我们自定义的结构体怎么办呢?
不要紧张,对自定义的结构体的封包和解包也有其用法:
例如:
struct WHPoint {
float x;
float y;
};
struct WHPoint p = {5 , 10};
NSValue *pointValue = [NSValue value:&p withObjCType:@encode(struct WHPoint)];
解包
struct WHPoint p2;
[pointValue getValue:&p2];
NSNull
NSNull 是空的意思
NSNull *null = [NSNull null]; 创建一个空的对象
我们可以看到NSNull 只有一个类方法,除此之外并没有什么特殊的用法和属性
#import <Foundation/NSObject.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSNull : NSObject <NSCopying, NSSecureCoding>
+ (NSNull *)null;
@end
NS_ASSUME_NONNULL_END
假设我们创建一个数组 可以往数组里面存储空的对像
NSArray *array = @[@"张三",null,@"王五"];
网友评论