Foundation--NSValue

本文详细介绍了如何使用NSValue类来封装数值,包括 NSNumber 的使用方法、如何将 NSRect、NSPoint 和 NSSize 等结构体数据转换为 NSValue 对象,并提供了具体的实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSNumber是NSValue的子类,NSValue可以封装任意值。使用下面的类方法便能创建新的NSValue对象。
- (instancetype)initWithBytes:(const voidvoid *)value objCType:(const charchar *)type 

传递的参数是你想要封装的数值的地址(NSSize或你自己的struct)。通常你得到的是想要存储的变量的地址( 在C语言要使用操作符& )。你也可以提供一个用来描述这个数据类型的字符串,通常用来说明struct中实体的类型和大小。你不用自己写代码来生成这个字符串,@encode编译器指令可以接收数据类型的名称并为你生成合适的字符串。所以按照如下方式把NSRect放入NSArray中。
NSRect rect = NSMakeRect(1, 2, 3, 4);  
NSValue *value = [NSValue value:&rect withObjCType:@encode(NSRect)];  
[array addObject:value];  

可以使用

- (void)getValue:(voidvoid *)value; 
来提取数值,调用getValue:时,需要传递存储这个数值的变量地址:

value = [array objectAtIndex: 0];  
[value getValue: &rect]; 
在上面的getValue:中,你可以看到方法名中使用了get,表明我们提供的是一个指针,而指针指向的空间则用来存储该方法生成的数据。


Cocoa提供了将常用的struct类型数据转换成NSValue的便捷方法:
+ (NSValue *)valueWithCGPoint:(CGPoint)point;  
+ (NSValue *)valueWithCGSize:(CGSize)size;  
+ (NSValue *)valueWithCGRect:(CGRect)rect;  
- (NSPoint)pointValue;  
- (NSSize)sizeValue;  
- (NSRect)rectValue;  
可以按照以下方式在NSArray中存储和提取NSRect的值
value = [NSValue valueWithCGRect:rect];  
[array addObject: value];  
NSRect annother = [value rectValue];  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值