我们在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提供数据。
分享到:
相关推荐
3.2 在面向对象的编程中使用间接24 3.2.1 过程式编程24 3.2.2 实现面向对象编程29 3.3 学习有关的术语33 3.4 Objective-C中的OOP34 3.4.1 @interface部分34 3.4.2 @implementation部分38 3.4.3 实例化对象40 3.4.4 ...
Software engineering,programming language,operating system,iOS,OS,iPhone,iPad objective c,cocoa touch,SDK,object oriented design,Apple,Macintosh,tools,language,runtime,Xcode,objective-...
具有噪声的基于密度的应用程序空间聚类的 Objective-C 实现 基于速度的算法 效果图 用法: NSArray points = @[[ NSValue valueWithCGPoint: CGPointMake ( 60 , 40 )], [ NSValue valueWithCGPoint: ...
OCMock-块测试 ### 特征 [OCMArg invokeBlock] 特定于块参数的约束。... 非Objective-C对象的参数值(例如,基元,结构,指针)必须装在NSValue 。 使用OCMOCK_VALUE可以方便地执行此操作。 在OCMDefault中传递
FDModel是一个Objective-C模型层,旨在极大地简化从远程对象(即NSDictionary,NSString,NSValue)创建模型对象的过程。 用户只需要在其FDModel的子类中重写remoteKeyPathsToLocalKeyPaths方法即可定义哪些远程键...
##截屏安装将以下内容添加到您的 Podfile中 pod 'MCGraphView', '~> 0.1'或克隆为git子模块, 或仅将MCGraphView文件夹中的文件复制到您的项目中。使用MCGraphView 以编程方式添加MCGraphView类或通过情节...
CDrawNode-Bezier ... [NSValue valueWithCGPoint:ccp(50,100)], [NSValue valueWithCGPoint:ccp(100,50)], [NSValue valueWithCGPoint:ccp(150,75)], [NSValue valueWithCGPoint:ccp(200,200)], [N
添加教程序列(与上面 gif 中使用的相同) // Set up in the AppDelegate (but could be anywhere really) NSValue *msgPoint = [ NSValue valueWithCGPoint: CGPointMake ( self .window.bounds.size.width * ...
将与您的平台匹配的框架添加到目标中,然后使用@import DHScatterGraph导入。 如果它不起作用,则可能是您为错误的平台添加了框架。 与其他任何视图一样,将DHScatterGraphView实例放在屏幕上。 图形的外观由属性...
// pointArray = @[[NSValue valueWithCGPoint:CGPointMake(200, 400)]]; -( void )drawPolygon:( NSArray *)pointArray; //圆形 -( void )drawCircleWithCenter:( CGPoint )center radius:( float )radius; //曲线...
演示类别使用情况的小型iOS应用。 例子 # include " UIBezierCurvePath+Interpolation.h " const char *encoding = @encode( CGPoint ); NSMutableArray *array = [NSMutableArray new]; // Add 4 CGPoints as ...
XSpotLight XSportLight *SportLight = [[XSportLight alloc ]init]; SportLight.messageArray = @[ @"这是《简书》 " , @"点这里撰写文章" , ...[ NSValue valueWithCGRect: CGRectMake (SCREEN_WIDTH/ 2 , SCREE
通常,这并不是要替换所有对象中的NSCoding代码,而是要为不太复杂的简单数据模型对象提供更多替换。 将其添加到模型可以使它们序列化所有属性(如果可能)。 它在运行时更改实际的类以符合NSSecureCoding 。 它...