1、常见结构体的储存
比较常见的结构体:CGPoint ,CGSize,CGRect。。。。。。我们如何存放到数组中呢?因为是结构体不是对象,不能添加到数组中,解决方法:把这些常见的结构装换成对象,让后放进去,取出来在装换成结构体使用。我们想到了NSValue使用方法如下:
CGPoint point = CGPointMake(0, 0);
NSMutableArray *array = [[NSMutableArray alloc]initWithCapacity:0];
NSValue *value = [NSValue valueWithCGPoint:point];
[array addObject:value];
取出数组之后的对象的使用:
NSValue *tmpValue = array[0];
CGPoint tmpPoint = [tmpValue CGPointValue];
下面是一些常见的结构体使用方法是一样的
@interface NSValue (NSValueUIGeometryExtensions)
+ (NSValue *)valueWithCGPoint:(CGPoint)point;
+ (NSValue *)valueWithCGVector:(CGVector)vector;
+ (NSValue *)valueWithCGSize:(CGSize)size;
+ (NSValue *)valueWithCGRect:(CGRect)rect;
+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
+ (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;
+ (NSValue *)valueWithUIOffset:(UIOffset)insets NS_AVAILABLE_IOS(5_0);
- (CGPoint)CGPointValue;
- (CGVector)CGVectorValue;
- (CGSize)CGSizeValue;
- (CGRect)CGRectValue;
- (CGAffineTransform)CGAffineTransformValue;
- (UIEdgeInsets)UIEdgeInsetsValue;
- (UIOffset)UIOffsetValue NS_AVAILABLE_IOS(5_0);
@end
2、自定义结构体的存储
同样是先转换NSValue对象再加入数组中,代码如下:
// 自定义的结构体
struct Test {
int ID;
CGFloat height;
};
typedef struct Test Test;
// 封装数据
Test tmpTest;
tmpTest.height = 80.0;
tmpTest.ID = 100;
NSLog(@"id==%d,height==%f",tmpTest.ID,tmpTest.height);
NSValue *customValue = [NSValue valueWithBytes:&tmpTest objCType:@encode(struct Test)];
// 取出数据
Test tmpTest1;
[customValue getValue:&tmpTest1];
NSLog(@"id==%d,height==%f",tmpTest1.ID,tmpTest1.height);
关于存到数据组和上面的一样就不在写了