NSValue

来源:互联网 发布:达内少儿编程能加盟吗 编辑:程序博客网 时间:2024/05/22 04:44

NSValue,即苹果定义的对象封装器,提供了简单的容器来包含C或Objective-C数据项。可以容纳任何基本数据类型如char,int,float,double,以及指针,结构体和对象ids。NSArray和NSSet集合类对象要求它们的元素为对象类型,NSValue的主要目的是使这些数据类型可以添加至集合中。NSValue对象是不可变类型。 

简而言之,NSValue是基本数据类型或自定义数据类型所定义变量的对象包装器。

1、创建NSValue,使用NSRange

valueWithRange:、rangeValue

NSRange rangeA=[[NSRange alloc] init];

rangeA.location = 10;

rangeA.length = 10;

NSValue * value = [NSValue valueWithRange:rangeA];

NSRange rangeB = [value rangValue];

2、封装结构体

typedef struct{

int id,

float height,

unsigned char flag

} MyTestStruct;

MyTestStruct testStruct1;

testStruct1.id = 0;

testStruct1.height = 10;

testStruct1.flag = 'Y';

NSValue * value = [NSValuevalueWithBytes:&testStruct1 objCType:@encode(MyTestStruct)];

取出NSValue的值

NSValue * valueB = [valeu getValue:&testStruct1 ];

  1. typedef  struct {  
  2.   
  3.              int id,  
  4.   
  5.              float  height,  
  6.   
  7.              unsigned char  flag  
  8.   
  9. }MyTestStruct;  

3、比常NSValue是否相等

isEqualToValue:

4、其他常用方法

  1. + (NSValue *)valueWithPointer:(const void *)pointer;//保存对象指针  
  2.    
  3. + (NSValue *)valueWithCGPoint:(CGPoint)point;//保存CGPoint结构体  
  4. + (NSValue *)valueWithCGSize:(CGSize)size;//保存CGSize结构体  
  5. + (NSValue *)valueWithCGRect:(CGRect)rect;//保存CGRect结构体  
  6. + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;  
  7. + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;  
  8.    
  9. - (void *)pointerValue;  
  10. - (CGPoint)CGPointValue;  
  11. - (CGSize)CGSizeValue;  
  12. - (CGRect)CGRectValue;  
  13. - (CGAffineTransform)CGAffineTransformValue;  
  14. - (UIEdgeInsets)UIEdgeInsetsValue;

0 0