• Effective Objective-C 2.0 — 第三条:多用字面量语法,少用与之等价的方法


    第三条:多用字面量语法,少用与之等价的方法

    几个类:NSString  NSNumber  NSArray  NSDictionary 

    字面量语法是一种语法糖(syntactic sugar)

    NSString *someString = @"字符串字面量";

    字面量数值:

    NSNumber *someNumber = @1;   等价与   NSNumber *someNumber = [NSNumber numberWithInt:1];

    NSNumber *intNumber = @1;

    int x = 5;

    NSNumber *expressionNumber = @(x * y);

    字面量数组:

    如果不用字面量:NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"mouse", @"badger", nil];

    使用字面量语法:

    NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];

    //!若数组元素对象中有nil,使用字面量语法创建数组会抛出异常,语法糖效果等于先创建了一个数组,然后把方括号内的所有对象都加到这个数组中,抛出异常为:

    'NSInavalidArgumentException' , reason:'.....attempt to insert nil object from objects[0]'

    取某个下标对应的对象:(subscripting)

       不用字面量:

            NSString *dog = [animals objectAtIndex:1];

       使用字面量:

            NSString *dog = animals[1];

    使用两种方法创建数组,其中object2为nil

    id object1 = /*...*/;      id object2 = /*....*/;     id object3 = /*...*/;

    NSArray *arrayA = [NSArray arrayWithObjects:object1, object2, object3, nil];

    NSArray *arrayB = @[object1, object2, object3];

    分析:arrayA只能创建object1 对象来,因为“arrayWithObject:“方法遇到nil会结束

         arrayB会抛出异常,so使用字面量语法更为安全,可以发现错误

    字面量字典

      Dictionary ,映射型数据结构,键值对

    NSDictionary *personData = [NSDictionarydictionaryWithObjectsAndKeys:

                    @"Matt", @"firstName", 

                    @"Galloway", @"lastName", 

                    [NSNumber numberWithInt:28], @"age",   

                     nil];

    顺序是 《对象》,《键》 与

    通常理解为 把“键”映射到“对象”,相反

    字面量:  NSDictionary *personData = @{@"firstName" : @"Matt",

                           @"lastName" : @"Galloway",

                         @"age" : @28};

    28区别原因:字典中的对象和键必须都是Objective-C对象,所以不能把28直接放进去,而要封装在NSNumber实例中才行

    由键访问其值 : 不用字面量: NSString *lastNamge = [personData objectForKey:@"lastName"];

            使用字面量:NSString *lastName = personData[@"lastName"];

    可变数组与字典:

    修改可变数组与字典内容的标准做法是:

      [mutableArray replaceObjectAtIndex:1 withObject:@"dog"];

      [mutableDictionary setObject:@"Galloway"forKey:@"lastName"];

    换成去下标:

      mutableArray[1] = @"dog";

      mutableDictionary[@"lastName"] = @"Galloway";

    局限性:

      除了字符串以外,所创建出来的对象必须属于Foundation框架。

      使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)   

      想要可变版本的对象,需复制一份:NSMutableArray *mutable = [@[@1, @2, @3]mutableCopy];  

                     

  • 相关阅读:
    hdu 5833 Zhu and 772002 (高斯消元)
    1203事件对象
    作用域面试题
    1130 JS高级 面向对象
    1122JS中级复习
    1120浏览器对象模型 函数分析
    1119动画和复习
    1114面试题作用域
    1113Js操作CSS样式
    1112函数封装和元素的属性
  • 原文地址:https://www.cnblogs.com/IDRI/p/5023066.html
Copyright © 2020-2023  润新知