您的位置:首页 > 产品设计 > UI/UE

nsvalue与结构体,指针和一些基本类型互转

2011-08-22 16:59 260 查看
Objective-C中NSValue的使用
2010-08-27 17:50

我们在C/C++开发中常会用到结构体来帮助我们简单封装基本数据类型,在Objective-C中我们也可以使用结构体来完成数据类型的封装。同时,Cocoa Touch还提供了一个NSValue来帮助我们更好地在开发中使用结构体。

我们可以使用NSValue来辅助我们实现一些简单数据结构的封装。比如我们定义了一个简单的结构体类型

typedef struct {

int id,

float height,

unsigned char flag

}MyTestStruct;

此时,我们就可以使用MyTestStruct这个结构体来很容易地封装数据。如

MyTestStruct myTestStruct;

myTestStruct.id=1;

myTestStruct.height=23.0;

myTestStruct.flag='A';

NSValue *value = [NSValue valueWithBytes:&myTestStruct objCType:@encode(MyTestStruct)];

在我们想取出*value 中的数据时,可以使用如下方式:

MyTestStruct theTestStruct;

[valeu getValue:&theTestStruct];

之后就可以对theTestStruct的操作来取得其中的数据。

对于NSValue 类的使用,还有一个地方就是我们在iPhone显示点或者其它几何图形时。比如我们想取得用户在屏幕上的点击轨迹,此时首先我们想到的就是使用CGPoint这个结构体来保存每一次点击的数据。此时,我们就可以使用NSValue类别中的+valueWithCGPoint:来帮助我们来为CG Framework提供数据。

NSValue包装对象指针,CGRect结构体等

@interface NSValue (NSValueUIGeometryExtensions)

+ (NSValue *)valueWithPointer:(const void *)pointer;//保存对象指针

+ (NSValue *)valueWithCGPoint:(CGPoint)point;//保存CGPoint结构体

+ (NSValue *)valueWithCGSize:(CGSize)size;//保存CGSize结构体

+ (NSValue *)valueWithCGRect:(CGRect)rect;//保存CGRect结构体

+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;

+ (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;

- (void *)pointerValue;

- (CGPoint)CGPointValue;

- (CGSize)CGSizeValue;

- (CGRect)CGRectValue;

- (CGAffineTransform)CGAffineTransformValue;

- (UIEdgeInsets)UIEdgeInsetsValue;

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: