#import <Foundation/Foundation.h> //定义一个数据结构 typedef struct myRect { float x ; float y ; float w ; float h ; } //定义的结构体类型 SSRect; int main(int argc, const char * argv[]) { @autoreleasepool { //声明一个点结构体对象 //对于结构体对象:不加* CGPoint point ; //x类型为CGFloat //CGFloat类型定义为double point.x = 10.01; point.y = 20.01; //CGPoint* pPoint = &point ; //定义一个大小结构体对象 //用来描述矩形的长,宽度 CGSize size ; //宽度变量 size.width = 100 ; //高度变量 size.height = 200 ; //定义一个矩形结构体对象 CGRect rect ; //矩形的左上角坐标 rect.origin.x = 5 ; rect.origin.y = 6 ; //矩形的宽度和高度 rect.size.width = 100 ; rect.size.height = 200 ; //NSPoint pt ; //将CGPoint类型对象转化为NSValue对象 //参数:为CGPoint或NSPoint类型的对象 NSValue* valuePoint = [NSValue valueWithPoint:point] ; //将CGSize类型对象转化为NSValue对象 //valueWithSize:参数为CGSize NSValue* valueSize = [NSValue valueWithSize:size] ; //将矩形CGRect对象转化为NSValue对象 NSValue* valueRect = [NSValue valueWithRect:rect] ; //范围结构体对象 NSRange range ; //开始位置 range.location = 10 ; //长度 range.length = 20 ; //将NSRange转化为NSValue对象 NSValue* valueRange = [NSValue valueWithRange:range] ; //储存结构体对象数组 NSMutableArray* array = [[NSMutableArray alloc] init] ; //将结构体对象添加到数组中 //Rectangle // [array addObject:valuePoint] ; [array addObject:valueSize] ; [array addObject:valueRect] ; [array addObject:valueRange] ; NSLog(@"1======数组%@",array); //取得数组的第一个对象 id obj = array[0] ; NSValue* vPoint = (NSValue*) obj ; //将NSValue中CGPoint的值转化为CGPoint类型取出 CGPoint pt = [vPoint pointValue] ; NSLog(@"pt.x = %f,pt.y = %f",pt.x,pt.y); NSValue* vSize = array[1] ; //获取size类型 NSSize si = [vSize sizeValue] ; NSValue* vRect = array[2] ; //得到矩形 NSRect rec = [vRect rectValue] ; NSValue* vRange = array[3] ; //得到范围 NSRange rang = [vRange rangeValue] ; //定义一个自定结构体对象 SSRect myRect ; myRect.x = 10 ; myRect.w = 20 ; myRect.y = 30 ; myRect.h = 40 ; NSValue* myValue = [NSValue valueWithBytes:&myRect objCType:@encode(SSRect)]; [array addObject:myValue] ; NSLog(@"2======数组%@",array); // SSRect rect2 ; [myValue getValue:&rect2] ; NSLog(@"r2.x=%f,r2.y=%f,r2.w=%f,r2.h=%f",rect2.x,rect2.y,rect2.w,rect2.h) ; } return 0; }