NSValue类是OC中用来存储任意值的容器,是NSNumber的父类,NSNumber类是用来封装基本数据类型的

初始化方法:

- (instancetype)initWithBytes:(const void *)value
                     objCType:(const char *)type
//便利构造器方法
+ (NSValue *) valueWithBytes:(const void *)value
                   objCType:(const char *)type

第一个参数为要封装的变量的地址,第二个参数用来描述该数据类型的字符串,可以用@encode编译器指令自动生成该字符串

用法:

//自定义结构体类型Student
typedef struct student{
        char name[50];
        char sex[2];
        NSInteger age;
        NSInteger grade;
        char number[50];
    }Student;
//创建结构体stu
Student stu = {"smithjackyson","男",23,98,"3112006304"};
//创建NSValue实例value存储stu
NSValue *value = [[NSValue alloc] initWithBytes:&stu objCType:@encode(Student)];
NSValue *value1 = [NSValue valueWithBytes:&stu objCType:@encode(Student)];

获取value中存储的对象如下:

//定义一个新结构体变量stu1
Student stu1;
//将value中存储的结构体赋值给stu1
[value getValue:&stu1];

判断两个NSvalue存储的对象是否相同

- (BOOL)isEqualToValue:(NSValue *)aValue

存储各种类型的便利构造器和属性,以及获取对应值的方法:

+ (NSValue *)valueWithRange:(NSRange)range
@property(readonly) NSRange rangeValue

+ (NSValue *)valueWithCGPoint:(CGPoint)point
- (CGPoint)CGPointValue

+ (NSValue *)valueWithCGVector:(CGVector)vector
- (CGVector)CGVectorValue

+ (NSValue *)valueWithCGSize:(CGSize)size
- (CGSize)CGSizeValue

+ (NSValue *)valueWithCGRect:(CGRect)rect
- (CGRect)CGRectValue

+ (NSValue *)valueWithPointer:(const void *)aPointer
@property(readonly) void *pointerValue

+ (NSValue *)valueWithNonretainedObject:(id)anObject
@property(readonly) id nonretainedObjectValue

+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform
- (CGAffineTransform)CGAffineTransformValue

+ (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets
- (UIEdgeInsets)UIEdgeInsetsValue

+ (NSValue *)valueWithUIOffset:(UIOffset)insets
- (UIOffset)UIOffsetValue

+ (NSValue *)valueWithCATransform3D:(CATransform3D)aTransform
@property(readonly) CATransform3D CATransform3DValue

+ (NSValue *)valueWithCMTime:(CMTime)time
@property(readonly) CMTime CMTimeValue

+ (NSValue *)valueWithCMTimeRange:(CMTimeRange)timeRange
@property(readonly) CMTimeRange CMTimeRangeValue

+ (NSValue *)valueWithCMTimeMapping:(CMTimeMapping)timeMapping
@property(readonly) CMTimeMapping CMTimeMappingValue

+ (NSValue *)valueWithMKCoordinate:(CLLocationCoordinate2D)coordinate
@property(readonly) CLLocationCoordinate2D MKCoordinateValue

+ (NSValue *)valueWithMKCoordinateSpan:(MKCoordinateSpan)span
@property(readonly) MKCoordinateSpan MKCoordinateSpanValue

+ (NSValue *)valueWithSCNVector3:(SCNVector3)vector
@property(nonatomic, readonly) SCNVector3 SCNVector3Value

+ (NSValue *)valueWithSCNVector4:(SCNVector4)vector
@property(nonatomic, readonly) SCNVector4 SCNVector4Value

+ (NSValue *)valueWithSCNMatrix4:(SCNMatrix4)
@property(nonatomic, readonly) SCNMatrix4 SCNMatrix4Value
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐