iOS学习之——NSValue
来源:互联网 发布:淘宝申请电子面单条件 编辑:程序博客网 时间:2024/06/06 15:06
一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
我们可以使用NSValue来辅助我们实现一些简单数据结构的封装。比如我们定义了一个简单的结构体类型
typedef struct{ int id; float height; unsigned char flag;}Test;
此时,我们就可以使用MyTestStruct这个结构体来很容易地封装数据。如
Test test; test.id=1; test.height=23.0; test.flag='A'; NSValue *value=[NSValue valueWithBytes:&test objCType:@encode(Test)];//对结构体进行封装 NSLog(@"id=%d,height=%f,flag=%c",test.id,test.height,test.flag);
在我们想取出*value 中的数据时,可以使用如下方式:
Test test2;//声明test2,为了得到test1的值 [value getValue:&test2];//同类型赋值 NSLog(@"id=%d,height=%f,flag=%c",test2.id,test2.height,test2.flag);
之后就可以对theTestStruct的操作来取得其中的数据。
对于NSValue类的使用,还有一个地方就是我们在iPhone显示点或者其它几何图形时。比如我们想取得用户在屏幕上的点击轨迹,此时首先我们想到的就是使用 CGPoint这个结构体来保存每一次点击的数据。此时,我们就可以使用NSValue类别中的+valueWithCGPoint:来帮助我们来为CGFramework提供数据。 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 // // NSArrayAndSelectorViewController.m // NSArrayAndSelector // // Created by Lixf on 09-10-15. // Copyright Lixf 2009. All rights reserved. // #import "NSArrayAndSelectorViewController.h" @implementation NSArrayAndSelectorViewController @synthesize SelectorArray, RectArray, TransformArray; // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; //NSValue包装指针 NSValue* start = [NSValue valueWithPointer:@selector(start:)]; NSValue* help = [NSValue valueWithPointer:@selector(help:)]; //NSArray 添加NSValue包装后的指针 NSArray *Array = [[NSArray alloc] initWithObjects:start, help, nil]; self.SelectorArray = Array; [Array release]; CGRect rect1 = {10, 10, 200, 200}; CGRect rect2 = {20, 20, 100, 100}; //NSValue包装CGRect结构 NSValue *aRect1 = [NSValue valueWithCGRect:rect1]; NSValue *aRect2 = [NSValue valueWithCGRect:rect2]; //NSArray 添加NSValue包装后的指针 NSArray *reArray = [[NSArray alloc] initWithObjects:aRect1, aRect2, nil]; self.RectArray = reArray; [reArray release]; //CGAffineTransform CGAffineTransform transform1 = CGAffineTransformMakeRotation(40); CGAffineTransform transform2 = CGAffineTransformMakeRotation(-40); NSValue *aTransform1 = [NSValue valueWithCGAffineTransform:transform1]; NSValue *aTransform2 = [NSValue valueWithCGAffineTransform:transform2]; NSArray *TransArray = [[NSArray alloc] initWithObjects:aTransform1, aTransform2, nil]; self.TransformArray = TransArray; [TransArray release]; [testView setFrame:[[RectArray objectAtIndex:0] CGRectValue]]; [testView setTransform:[[TransformArray objectAtIndex:0] CGAffineTransformValue]]; [self performSelector:[[SelectorArray objectAtIndex:0] pointerValue] withObject:nil afterDelay:0.5]; } -(void)start:(id)sender{ NSLog(@"start"); [testView setFrame:[[RectArray objectAtIndex:1] CGRectValue]]; [testView setTransform:[[TransformArray objectAtIndex:1] CGAffineTransformValue]]; [self performSelector:[[SelectorArray objectAtIndex:1] pointerValue] withObject:nil afterDelay:0.5]; } -(void)help:(id)sender{ NSLog(@"help"); //[testView setFrame:[[RectArray objectAtIndex:0] CGRectValue]]; //[testView setTransform:[[TransformArray objectAtIndex:0] CGAffineTransformValue]]; }
原文:http://blog.sina.com.cn/s/blog_bf9843bf0101ehs1.html
1 0
- iOS学习之——NSValue
- ios开发之NSValue
- IOS开发之OC篇(5)—— NSNumber、NSValue
- 黑马程序员——Objective-C学习之NSNumber\NSValue\NSNull
- 黑马程序员——Foundation学习之NSNumber\NSValue\NSNull\NSFileManager\NSDate\NSData
- iOS NSValue
- 黑马程序员——foundation框架之NSNumber,NSDate,NSValue
- 黑马程序员20——OC之Fundation(NSValue)
- Objective-C(十、NSRange,point,size,rect,NSNumber,NSValue,NSNull)——iOS开发基础
- iOS--NSNumber,NSDate,NSValue
- Object-c学习之路十(NSNumber&NSValue)
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员_Foundation学习之NSSet、NSDictionary、NSNumber、NSValue、NSDate
- OC学习小结之Foudation -NSNUmber、NSValue、NSNull、NSDate
- 黑马程序员----OC学习笔记之NSNumber和NSValue
- 黑马程序员——Foundation学习—-----NSDate、NSValue、NSNumber使用
- foundation的使用——NSNumber NSValue
- Foundation 之 NSValue
- 游标
- SQLite的设计与概念
- Swift学习之一:常量与变量
- Redis总结(一)Redis安装
- Java导出txt文件的方法
- iOS学习之——NSValue
- java工具类-给定一个file实例将该目录下的文件以及目录输出
- Redis从基础命令到实战之字符串类型
- Android Matrix详解
- Oracle如何实现类似MySQL的show create table,show index的功能
- 【转载】PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- jmap | jstack 报错
- google打不开,修改google hosts
- ActiveMQ 点对点(p2p)