zoukankan      html  css  js  c++  java
  • Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化

    从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性。创建数组NSArray,哈希表NSDictionary, 数值对象NSNumber时,可以像NSString的初始化一样简单方便。妈妈再也不担心程序写得手发酸了。

    有兴趣的朋友可以关注LLVM编译器的相关文档:http://clang.llvm.org/docs/ObjectiveCLiterals.html

    关于NSDictionary和NSNumber的例子来自:http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and

    I. NSArray

    首先是非常常用的NSArray,NSMutableArray。NSArray是一个初始化后就固定的静态数组。如果想对数组的元素进行插入,删除,更新等操作,就得使用Objective-C 的动态数组NSMutableArray。

    在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之后也可以继续使用。

    //LLVM4.0之前 NSArray的初始化

    NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];

    // 取得数组第2个值

    NSString *s = [oldOne objectAtIndex:1];

    在LLVM4.0之后,NSArray的初始化方法如下。

    NSArray *newOne =@[@"1st", @"2nd", @"3th”];

    // 取得数组第2个值

    NSString *s = newOne[1];

    特别要说一下NSMutableArray。LLVM4.0之前,如果你要更新数组的某个元素,一般使用下面的方法。

    //LLVM4.0之前 NSMutableArray的初始化

    NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];

    [mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某个元素

    在编写一些常用算法时,下面的特性导致编写起来有一点麻烦。

    /*想更新NSMutableArray的某个元素?请先初始化这个元素*/

    NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];

    /*必须如下给每个元素赋一个初值,否则exception会发生

     for (int h = 0; h < 5; h++) {

        [oldMutable addObject:@"1"];

     }

    @try{

         [mutable replaceObjectAtIndex:1 withObject:@"disposed"];

      }

    @catch(NSException *exception){

          NSLog(@“%@“, [exception description]);

     }

    这而LLVM4.0简化了这一个过程,可以用如下方式简单完成。

    //LLVM4.0之后

    NSMutableArray *newMutable = [NSMutableArray alloc] init];

    newMutable[2] = @"myObject";

    突然觉得世界清爽了不少,对于熟悉C语言和java等的童鞋来说,是不是觉得亲切多了?

    关于NSDictionary和NSNumber的变化如下, 就不细说啦。

    II.NSDictionary

    一般性的写法:

    dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]

                                       forKeys:@[k1, k2, k3]];

    LLVM4.0之前后:

    dict = @{ k1 : o1, k2 : o2, k3 : o3 };

    III. NSNumber

    一般性的写法:

    NSNumber *number;

    number = [NSNumber numberWithChar:'X'];

    number = [NSNumber numberWithInt:12345];

    number = [NSNumber numberWithUnsignedLong:12345ul];

    number = [NSNumber numberWithLongLong:12345ll];

    number = [NSNumber numberWithFloat:123.45f];

    number = [NSNumber numberWithDouble:123.45];

    number = [NSNumber numberWithBool:YES];

    LLVM4.0之前后:

    NSNumber *number;

    number = @'X';

    number = @12345;

    number = @12345ul;

    number = @12345ll;

    number = @123.45f;

    number = @123.45;

    number = @YES;

  • 相关阅读:
    【幻化万千戏红尘】qianfeng-Android-Day20_LruCache
    【幻化万千戏红尘】qianfeng-Android-Day20_Bitmap二次采样
    【幻化万千戏红尘】qianfeng-Android-Day20_Handler_Looper_MessageQueue
    【幻化万千戏红尘】qianfeng-Android-Day19_导航栏制作
    【幻化万千戏红尘】qianfeng-Android-Day18_Fragment
    【幻化万千戏红尘】qianfeng-Android-Day17_ViewPager
    【幻化万千戏红尘】qianfeng-Android-Day16动画
    【幻化万千戏红尘】qianfeng-Android-Day13_SQLiteOpenHelper
    【幻化万千戏红尘】qianfeng-Android-Day13_SQLiteDataBases
    【幻化万千戏红尘】qianfeng-Android-Day12SharedPreference、内部存储、外部存储
  • 原文地址:https://www.cnblogs.com/jiulin/p/3584251.html
Copyright © 2011-2022 走看看