//
// main.m
// Foundation框架(12)
//
// Created by Mac on 15-1-24.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import
#pragma mark 将结构体转成OC对象
void value(){
// OC中的数组只能装OC对象,结构体不是对象!!!
CGPoint point = CGPointMake(11, 21);
// 将结构体变量包装成一个对象,然后放到数组中去
NSValue *value = [NSValue valueWithPoint:point];
NSMutableArray *array = [NSMutableArray array];
[array addObject:value];
NSLog(@"array = %@", array);// array = ("NSPoint: {11, 21}"}
// 取出结构体对应的对象
NSValue *value2 = [array lastObject];
// 用pointValue方法取出结构
CGPoint point2 = [value2 pointValue];
NSString *str = NSStringFromPoint(point2);
NSLog(@"str = %@", str);// str = {11, 21}
}
typedef struct {
int year;
int month;
int day;
} Date;
#pragma mark 将自定义的结构体转成OC对象
void value2(){
Date date = {2015, 1, 24};
// 根据结构体类型生成对应的类型描述字符串
char *type = @encode(Date);
// value:void *, void *表示没有类型的指针,也就是任何类型的指针
NSValue *value = [NSValue value:&date withObjCType:type];
Date date2;
// 取出包装好的结构体,这里没有返回值,传入的参数是date2的内存地址,理解!!!
[value getValue:&date2];
// 取出类型描述字符串
// [value objCType];
NSLog(@"year = %i, month = %i, day = %i", date2.year, date2.month, date2.day);
// year = 2015, month = 1, day = 24
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// value();
value2();
}
return 0;
}
Foundation框架(12)——NSValue的使用
最新推荐文章于 2018-07-27 03:13:35 发布