OC-04值对象

OC-04值对象
创建和初始化类方法    初始化实例方法    取值实例方法
numberWithChar:    initWithChar:    charValue
numberWithShort:    initWithShort:    shortValue
...    ...    ...







#import  
 
NSNumber *myNumber,*floatNumber,*intNumber,*number1;  
 
//创建integer类型对象  
intNumber = [NSNumber numberWithInteger:123];  
NSLog(@"%i",[intNumber integerValue]);  
 
//创建long类型对象  
myNumber = [NSNumber numberWithLong:0xababab];  
NSLog(@"%lx",[myNumber longValue]);  
 
//创建char类型对象  
myNumber = [NSNumber numberWithChar:'K'];  
NSLog(@"%c",[myNumber charValue]);  
 
//创建float类型对象  
floatNumber = [NSNumber numberWithFloat:123.00];  
NSLog(@"%f",[floatNumber floatValue]);  
 
//创建double类型对象  
myNumber = [NSNumber numberWithDouble:112233e+15];  
NSLog(@"%lg",[myNumber doubleValue]);  
 
//判断两个对象的值是否相等  
if ([intNumber isEqualToNumber:floatNumber] == YES ) {  
   NSLog(@"值相等");  
} else {  
   NSLog(@"值不相等");  
}  
 
//比较两个对象的值大小  
if ( [intNumber compare:myNumber] == NSOrderedAscending) {  
   NSLog(@"左边的数字小");  
} else {  
   NSLog(@"左边的数字大");  
}  
 
//初始化实例  
number1 = [[NSNumber alloc] initWithInt:1000];  
NSLog(@"%d",[number1 intValueunsigned];  
[number1 release];
=======================
////////////////////便捷的struct转换成NAValue方式////////////////////////     
 //声明并初始化一个struct
  NSRect rtc1 = NSMakeRect(100, 200, 300, 400);     
//创建一个NSValue
  NSValue *value1 = [NSValue valueWithRect:rtc1];     
//把value1添加到数组中
 NSMutableArray *array1 = [NSMutable ArrayarrayWithCapacity:10];   
  [array1 addObject:value1];    
 NSRect rt1 = [value1 rectValue];
 
//输出结果
  NSLog(@"%f %f %f %f", rt1.origin.x, rt1.origin.y, rt1.size.height, rt1.size.width);
   }  return 0;
}
 
注意:在集合中不能存放nil值,因为在NSArray和NSDictionary中nil有特殊的含义。但是在有些时候,确实需要用到这样的空值,比如在字典中,电话簿中"Zhang San"关键字下有电话号码、家庭住址、Email等等信息,但是现在只知道他的电话号码,这种不知道其他信息
3、Cocoa提供了常用struct数据类型转换成NSValue的便捷方法:
+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
- (NSPoint)pointValue;
- (NSSize)sizeValue;
 - (NSRect)rectValue;
NSRect是一个矩形数据种类,NSPoint是起始点,NSSize存储长度和宽度,这些常用的数据种类是C的struct而不是对象。
下边我们通过实验来认识NSValue的使用方式:
#import int main (int argc, constchar * argv[]) {
 @autoreleasepool {  
 //声明并初始化一个struct
  NSRectrtc = NSMakeRect(12, 32, 433, 343);     
//创建一个NSValue:
  NSValue *value = [NSValue valueWithBytes:&rtc objCType:@encode(NSRect)];     
//把value添加到数组中
  NSMutableArray *array = [NSMutable ArrayarrayWithCapacity:10];         
  [array addObject:value];  
 
NSRect rt;   

//从数组中取到NSValue,因为只添加了一个,所以小标是0     
 NSValue *v = [array objectAtIndex:0];     
//从value中取得一个NSRect,虽然返回值是void,但其实是它是利用指针返回值

 [v getValue:&rt];     
//输出结果
  NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);     
//用快速枚举遍历array并输出NSValue中struct属性的值   
for(NSValue *v in array)     {     
   NSRect rt;   
   [v getValue:&rt];      
NSLog(@"%f %f %f %f", rt.origin.x, rt.origin.y, rt.size.height, rt.size.width);    

 }



RunLoop
http://www.cocoachina.com/ios/20150821/13119.html

你可能感兴趣的:(OC-04值对象)