码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-09-11 22:03:36      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

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];
        NSMutableArray *array = [NSMutableArray arrayWithObjects: intObj, nil];
        
        // float 包装成 NSNumber
        NSNumber *floatObj = [NSNumber numberWithFloat:b];
        // 把对象添加到数组中
        [array addObject:floatObj];
        
        // double 包装成 NSNumber
        NSNumber *doubleObj = [NSNumber numberWithDouble:d];
        // 把对象添加到数组中
        [array addObject:doubleObj];
        
        // @数值,把数值包装成对象,快速简单的方法
        [array addObject:@(x)];
        NSLog(@"%@",array);
        
        // 数组的第一个元素和第二个元素相加
        NSNumber *n1 = array[0]; // 取出第0位元素
        int a1 = [n1 intValue];
        NSNumber *n2 = array[1]; // 取出第1位元素
        float a2 = [n2 floatValue];
        
        //a1 = a1+a2;
        // 简洁
        a1 = [array[0] intValue] +[array[1] floatValue];
        NSLog(@"%d",a1);
        

 

NSValue:主要是用来把指针,CGRect结构体等包装成OC对象,以便储存

    CGPoint p1 = CGPointMake(3, 5);
    CGRect r1 = CGRectMake(0, 3, 5, 9);
    NSMutableArray *arr = [NSMutableArray array];
    // p1包装成 obj
    NSValue *pointValue = [NSValue valueWithPoint:p1];
    
    // 把对象存到数组中
    [arr addObject:pointValue];
    // 把r1 包装成 NSValue对象
    [arr addObject:[NSValue valueWithRect:r1]];
    NSLog(@"%@",arr);
    
    // 取出r1 的值
    NSValue *r1Value = [arr lastObject];
    NSRect r2 = [r1Value rectValue];
    
    NSLog(@"%@", NSStringFromRect(r2));

 

包装struct

// 定义日期结构体
typedef struct Date
{
    int year;
    int month;
    int day;
    
} MyDate;
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 年—月-日
        MyDate nyr = {2015, 9, 11};
        
        // @encode(MyDate)作用,把MyDate类型生成一个常量字符串描述
        NSValue *val = [NSValue valueWithBytes:&nyr objCType:@encode(MyDate)];
        
        // 定义一个数组,把val存到数组中
        NSMutableArray *arr = [NSMutableArray arrayWithObject:val];
        /*
         从数组中取出来NSValue对象
         从对象中,取出结构体变量的值
         传入一个结构体变量的地址
         */
        MyDate tmd;
        [val getValue:&tmd];
        NSLog(@"%d, %d. %d",tmd.year, tmd.month, tmd.day);
        

 

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

标签:

原文地址:http://www.cnblogs.com/1023843587qq/p/4802156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!