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

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

 

 

Objective-c代码 
  1.   typedef  struct {  
  2.   
  3.              int id,  
  4.   
  5.              float  height,  
  6.   
  7.              unsigned char  flag  
  8.   
  9. }MyTestStruct;  

 

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

 

 

Objective-c代码 
  1. MyTestStruct   myTestStruct;  
  2.   
  3.     myTestStruct.id=1;  
  4.   
  5.     myTestStruct.height=23.0;  
  6.   
  7.     myTestStruct.flag='A';  
  8.   
  9.     NSValue *value = [NSValue valueWithBytes:&myTestStruct objCType:@encode(MyTestStruct)];  

 

 

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

 

 

Objective-c代码 
  1. MyTestStruct  theTestStruct;  
  2.   
  3. [valeu getValue:&theTestStruct];  

 

 

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

 

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