NSValue的使用

NSNumber是NSValue的子类,但 NSNumber只能包装数字类型,NSValue可以包装任意值。也可以用NSValue包装结构体后加入NSArray,NSDictionary等集合中。

创建NSValue的常用方法

  • - (id)initWithBytes:(const void *)value objCType:(const char *)type
  • + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type
  • + (NSValue *)value:(const void *)value withObjCType:(const char *)type

value参数是想要包装的数据的地址(如一个NSPoint的地址,可以用&来取地址),type参数是用来描述这个数据类型的字符串,用@encode指令来生成

例如:

typedef struct{

  int year;

  int month;

  int day;

}Date;

Date date = {2013, 4,7};

//包装结构体

char *ctype = @encode(Date);

NSValue *value = [NSValue value:&date withObjCType:ctype];

//取出包装好的结构体

Date date1;

[value getValue:&date1];

NSValue常用方法

  • - (void)getValue:(void *)value //获取所包装的数据,保存到value这个地址
  • - (const char *)objCType //返回描述所包装数据类型的字符串, 即用@encode(Date)生成的类型描述字符串
  • - (BOOL)isEqualToValue:(NSValue *)value

为了方便struct和NSValue的转换,cocoa还提供了以下方法:

  • + (NSValue *)valueWithPoint:(NSPoint)point
  • + (NSValue *)valueWithSize:(NSSize)size
  • + (NSValue *)valueWithRect:(NSRect)rect
  • - (NSPoint)pointValue
  • - (NSSize)sizeValue
  • - (NSRect)rectValue

NSValue的使用,布布扣,bubuko.com

时间: 2024-10-10 00:44:27

NSValue的使用的相关文章

oc的包装类 NSValue NSNumber

我们都知道oc是面向对象的,但是oc是由c语言扩展而来的,c语言中的int 等类型都不是对象,那么oc 是如何拥有“对象”特征的呢? oc提供了NSValue 和 NSNumber 来封装c语言的基本类型,这样就具有来面向对象的特征了... NSValue是NSNumber的父类. NSValue代表更通用的包装类,可以包装 short int float char 对象id 指针  通过对这些的包装就可以添加到NSArray等集合中了: NSNumber代表更具体的包装类,主要有三个方法:(x

原 IOS之NSValue整理

原 IOS之NSValue整理 发表于2年前(2013-02-28 23:02)   阅读(1974) | 评论(0) 5人收藏此文章, 我要收藏 赞3 IOS NSValue 值对象(value object)概念 在面向对象的编程语言中,值对象本质上是数据元素的的对象包装器,所谓数据元素,常见的包含string,number,date类型以及其它自定义的结构体类型.Objective-C语言本身提供了string,number,date相对应的包装类,分别是NSString,NSNumber

NSValue NSNumber NSData类

NSValue NSNumber NSData类 步骤1 NSValue 我们先看看NSValue能做什么: 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器.它可以保存任意类型的数据,比如 int,float,char,当然也可以是指pointer, structure, and object id.NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的数据结构,如NSArray或者NSSet 的实例.需要注意的是NSV

数值类对象:NSNumber,NSValue,NSNull

基本,集合,复杂,对象 可用对象封装基本数值,然后将对象放入NSArray或NSDictionary 中. 用对象封装基本数值后,即可给其发送消息. 数值类型包括:NSNumber,NSValue,NSNull类. oc不支持自动装箱 NSNumber类 创建方法 + (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithFloat:(floa

OC-NSNumber与NSValue

//主要作用: //由于OC中NSArray\NSDictionary中只能存储对象 //那么NSNumber就是用来把int\float\double等转换成对象 NSNumber * nb=[NSNumber numberWithInt:5]; NSArray * [email protected][nb]; NSNumber * nb2=arr.firstObject; int a=nb2.intValue; NSNumber * [email protected]; NSArray *[

Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)

1.NSNumber 将基础数类型数据转成对象数据(比如int  float double BOOL  long等等) //通过NSNumber将基础数类型数据转成对象数据. NSNumber * intNumber = [[NSNumber alloc] initWithInt:50]; NSNumber * floatNumber = [NSNumber numberWithFloat:45.3]; //xcode4.6以后,可以采用如下写法 NSNumber * doubleNumber

Object - C 值对象 NSNumber和NSValue

在进行数据处理的时候,因为对象类型的不同, 并不能进行相应的数据处理,所以必须要进行数据类型的转换,这也就是NSNumber,NSValue这两类值对象出现的原因. 简而言之,NSNumber就是实现基本数据类型与对象类型的互相转换,而NSValue,则是实现结构体对象与对象类型的互相转换. NSNumber因为是实现基本数据类型与对象类型的互相转换,所以,必须是要有数据类型,而int ,char,BOOL,Float,Long,Integer等等等-都可以进行相应的转换 //1.将基本数据类型

Objective-C( Foundation框架 一 NSNumber(NSValue))

NSNumber: 是OC中处理数字的一个类 NSValue是NSNumber的子类 如何处理: 把int,float,double  包装成一个对象 使用NSNumber的好处: 可以把基本数据类型的数据,保存到数组或字典中 // 定义基本数据类型 int a = 10; float b = 2.2f; double d = 1.22; int x = 100; // int 包装成 NSNumber NSNumber *intObj = [NSNumber numberWithInt:a];

Object -C NSValue -- 笔记

// //  main.m //  NSValue // //  Created by facial on 26/8/15. //  Copyright (c) 2015 facial_huo. All rights reserved. // #import <Foundation/Foundation.h> struct sct { int a; int b; }test; int main(int argc, const char * argv[]) { @autoreleasepool

OC中的NSValue

1 NSvalue把复杂的数据类型(指针.结构体等)存储成对象 2 3 struct sct{ 4 int a; 5 int b; 6 }sctt={4,5}; 7 8 NSValue *value=[[NSValue alloc] initWithBytes:&sctt objCType:@encode(struct sct)]; 9 10 NSLog(@"%s",@encode(int));结果是i 11 NSLog(@"%s",@encode(floa