• 52个有效方法(3)


    使用字面量方法来创建字符串、数值、数组、字典,与创建此类对象的常规方法相比,这么做更加简明扼要

    字面数值

    将整数, 浮点数,布尔值封入对象,可用NSNumber

        NSNumber *intNumber = @1;
        NSNumber *floatNumber = @2.5f;
        NSNumber *doubleNumber = @3.14159;
        NSNumber *boolNumber = @YES;
        NSNumber *charNumber = @'a';
        //表达式
        NSInteger x = 5;
        CGFloat y = 6.32f;
        NSNumber *expressionNumber = @(x*y);
    

    字面数组

    // 不使用字面量语法创建数组,取下标操作
    NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"monkey", nil];
    NSString *dog = [animals objectAtIndex:1];
    // "arrayWithObjects:" 方法会依次处理各个参数,直到发现 nil
    
    // 字面量语法
    NSArray *animals = @[@"cat", @"dog", @"monkey"];
    NSString *dog = animals[1]; //“取下标”(subscripting)操作
    
    

    注意: 若数组元素对象中有nil,则会抛出异常。

    id object1 = /* ... */;  
    id object2 = /* ... */;  
    id object3 = /* ... */;  
     
    NSArray *arrayA = [NSArray array WithObjects:  
                           object1, object2, object3, nil];  
    NSArray *arrayB = @[object1, object2, object3]; 
    /**
    大家想想:如果object1与object3都指向了有效的Objective-C对象,而object2是nil,那么会出现什么情况呢?按字面量语法创建数组arrayB时会抛出异常。arrayA虽然能创建出来,但是其中却只含有object1一个对象。原因在于,“arrayWithObjects:”方法会依次处理各个参数,直到发现nil为止,由于object2是nil,所以该方法会提前结束。
    这个微妙的差别表明,使用字面量语法更为安全。抛出异常令应用程序终止执行,这比创建好数组之后才发现元素个数少了要好。向数组中插入nil通常说明程序有错,而通过异常可以更快地发现这个错误。
    */
    

    原因: 字面量语法实际上只是一种“语法糖”,其效果等于先创建一个数组,然后把方括号内的所有对象都加到这个数组。

    字面量语法更安全: 抛出异常令应用程序终止,比创建好数组后才发现元素个数少了好。向数组中插入 nil 通常说明程序有错。

    字面字典

    字典中的对象和键必须都是Objective-C对象

    // 不使用字面量语法定义的字典,取值操作
    NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:
                                    @"Thomas", @"firstName",
                                    @"Jefferson", @"lastName",
                                    [NSNumber numberWithInt:28], @"age",
                                    nil];
    NSString *firstName = [personData objectForKey:@"firstName"];
    
    // 字面量语法定义
    NSDictionary *personData = @{ @"firstName" : @"Thomas",
                                   @"lastName" : @"Jefferson",
                                        @"age" : @28
                                   };
    NSString *firstName = personData[@"firstName"];
     
    

    注意1: 不能把整数直接放进去,要封装成 NSNumber 实例。

    注意2: 与数组一样,字面量定义的字典,若值为 nil,也会抛出异常。

    可变数组与字典

    通过取下标操作,可以访问数组中某个下标或字典中某个键所对应的元素。如果数组与字典对象是可变的(mutable),那么也能通过下标修改其中的元素值。

    mutableArray[1] = @"dog";  
    mutableDictionary[@"lastName"] = @"Galloway"; 
    

    字面量语法的局限性

    • 除了字符串,所创建对象必须属于 Foundation 框架(NSString,NSNumber,NSArray,NSDictionary这几个类均属于Foundation框架)

    • 使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)。若想要可变版本的对象,则需复制一份。

      NSMutableArray *mutableArray  = [@[@1, @2, @3, @4, @5] mutableCopy];
      

    要点

    1. 应该使用字面量语法来创建字符串、数值、数组、字典。与创建此类对象的常规方法相比,这么做更加简明扼要。

    2. 应该通过取下标操作来访问(修改)数组下标或字典中的键所对应的元素。

    3. 用字面量语法创建数组或字典时,若值中有nil,则会抛出异常。因此,务必确保值里面不含nil。

  • 相关阅读:
    java.util.concurrent.atomic 包详解
    SpringBoot RESTful 应用中的异常处理小结
    Spring 核心框架体系结构
    Java 的静态代理 动态代理(JDK和cglib)
    Spring5:@Autowired注解、@Resource注解和@Service注解
    offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别
    一个小技能
    在chrome console添加jQuery支持
    如和判断两个浮点数是否相等
    Object.create() vs new SomeFunction() in javascript
  • 原文地址:https://www.cnblogs.com/shikaiming/p/11678375.html
Copyright © 2020-2023  润新知