OC -- NSValue

/*____________________________NSValue___________________________________*/

/*
  typedef struct _NSRange
  {
    NSUInteger location;
    NSUInteger length;
  }NSRange;
*/


//结构体不是对象
struct Student
{
  char name[20];
  NSInteger age;
};


//自定义结构体
typedef struct Student StrClass;
StuClass stu1 = {"tom",20};
NSLog(@"%s %ld",stu1.name,stu1.age);

//位置信息
NSRange range = NSMakeRange(0,1);

//点
NSPoint point = NSMakePoint(0,0);

//尺寸
NSSize size = NSMakeSize(100,100);

//矩形区域
NSRect rect = NSMakeRect(0,0,100,100);

//创建
NSValue *value = [[NSValue alloc]init];


//1.结构体 ==> 对象
NSValue *rageValue = [NSValue valueWithRange:range];
NSValue *sizevalue = [NSValue valueWithSize:size];
NSValue *pointValue = [NSValue valueWithPoint:point];
NSValue *rectValue = [NSValue valueWithRect:rect]

/*
  + (NSValue *)value:(const void *)value weithObjCType:(const cahr *)type;
  将自定义结构体封装成NSValue 对象
  @param value 结构体地址
  @param type 结构体的类型 -> @encode(结构体类型名) ==>  字符串
  @return NSValue类型的结构体
 */
NSValue *stuValu = [NSValue value:&stu1 withObjeCType:@encode(StuClass)];


//2.存入容器
NSArray *array = @[rageValue,pointValue,stuValue];
NSLog(@"%@",array);



//3.对象 ==> 结构体

//1.
NSValue *rv = array[0];
NSRange rang_1;
[rv getValue:&range_1];
NSLog(@"%@",NSStringFronRange(range_1));


//2.
StuClass newstu;
/*
  将NSValue ===> 结构体
  - (void)getValue:(void *)value;
  调用者:NSValue对象
  @param value -> 结构体地址 -> &structA
  结果 -> 将NSValue 对象中的结构体 获取至structA
*/

[array[2] getValue:&newstu];
NSLog(@"%s %ld",newstu.name,newstu.age);




/*_______________________________NSNull________________________________________*/

/*
  nil 空指针:空白的地址
  null 空对象:空白的对象,有地址
*/

//创建空对象
NSObject *objc = nil;
NSNull *null = [NSNull null];

NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
[dic setObject:@100 forKey:@"小明"];
[dic setObject:@60 forKey:@"小红"];
[dic setObject:null forKie:@"小兰"];

NSLog(@"%@",dic);




你可能感兴趣的:(OC -- NSValue)