
我们在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 *)valueWithCGAffine@R_502_4154@:(CGAffine@R_502_4154@)@R_502_4154@; + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets; - (voID *)pointerValue; - (CGPoint)CGPointValue; - (CGSize)CGSizeValue; - (CGRect)CGRectValue; - (CGAffine@R_502_4154@)CGAffine@R_502_4154@Value; - (UIEdgeInsets)UIEdgeInsetsValue; @end
总结以上是内存溢出为你收集整理的nsvalue与结构体,指针和一些基本类型互转全部内容,希望文章能够帮你解决nsvalue与结构体,指针和一些基本类型互转所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)