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

几个类: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];  

                 

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

  1. Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)

         当使用Objective-C的时候,你总会遇到Foundation 框架中的一些类,这些类包含NSString,NSNumber,NSArray和NSDictionary,这些数据结构都是自 ...

  2. 《effective java》读书札记第三条用私有构造器或者枚举类型强化Singleton属性

    Singleton指只被实例化一次的类.一般用来搞那些创建很耗资源或者要求系统中只能有一个实例的类. 这个很经常使用.记得曾经实习面试的时候就有这个面试题. 一般採用的方法是将构造器私有化,然后提供一 ...

  3. 笔记 《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 》

    阅读此书的笔记点: 此书目录即是对知识点最好的总结 第1章 熟悉Objective-C ---------------------------------------------- 第1条:了解Obj ...

  4. [Effective JavaScript 笔记]第52条:数组字面量优于数组构造函数

    js的优雅很大程序要归功于程序中常见的构造块(Object,Function及Array)的简明的字面量语法.字面量是一种表示数组的优雅方法. var a=[1,2,3,5,7,8]; 也可以使用构造 ...

  5. Javascript模式(第三章字面量与构造函数)------读书笔记

    一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ...

  6. JS基础语法---创建对象---三种方式创建对象:调用系统的构造函数;自定义构造函数;字面量的方式

    创建对象三种方式: 调用系统的构造函数创建对象 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象) 字面量的方式创建对象 第一种:调用系统的构造函数创建对象 //小苏举例子: //实例化对 ...

  7. Effective Objective-C 2.0 — 第四条:多用类型常量,少用#define预处理指令

    第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生 ...

  8. [.NET] 《Effective C#》快速笔记(三)- 使用 C# 表达设计

    <Effective C#>快速笔记(三)- 使用 C# 表达设计 目录 二十一.限制类型的可见性 二十二.通过定义并实现接口替代继承 二十三.理解接口方法和虚方法的区别 二十四.用委托实 ...

  9. RyuBook1.0案例三:REST Linkage

    REST Linkage 该小结主要介绍如何添加一个REST Link 函数 RYU本身提供了一个类似WSGI的web服务器功能.借助这个功能,我们可以创建一个REST API. 基于创建的REST ...

随机推荐

  1. 77.Android之代码混淆

    转载:http://www.jianshu.com/p/7436a1a32891 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使 ...

  2. CODE[VS] 1346 HelloWorld编译器

    1346 HelloWorld编译器  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold     题目描述 Description 请编程判断一个负责打印HelloWo ...

  3. js-JavaScript高级程序设计学习笔记6

    第八章 BOM 1.BOM的核心对象是window,他表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过JS访问浏览器窗口的一个接口,又是ES规定的Global对象. 2.定义全 ...

  4. PHOG特征

    PHOG特征 2016年7月13日 21:07:57 什么是PHOG PHOG是Pyramid HOG(pyramid histogram of oriented gradient)的简称,是在图像尺 ...

  5. Hadoop中JAVA不经过Catch(Exception e)直接到finally或者退出原因

    原来是被变成Throwable抛出来了!而Exception是Throwable的子类,所以无法捕捉到,只有捕捉Throwable的时候,才可以将错误信息打印!

  6. 【bzoj1497】 NOI2006—最大获利

    http://www.lydsy.com/JudgeOnline/problem.php?id=1497 (题目链接) 题意 给出一个图,每一个点有一个负点权,每一条边有一个边权.选择某一条边的前提是 ...

  7. 【poj1014】 Dividing

    http://poj.org/problem?id=1014 (题目链接) 题意 给出有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份, ...

  8. bzoj3295: [Cqoi2011]动态逆序对(树套树)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  9. SQLServer日期格式化

    0   或   100   (*)     默认值   mon   dd   yyyy   hh:miAM(或   PM)       1   101   美国   mm/dd/yyyy       ...

  10. 做自己的类库dll文件

    除了在项目中把类放在不同的文件夹之外,还可以把他们放在完全不同的项目中,添加引用dll 实现对类的调用, 如果一个项目只包含类 但没有入口点 ,那么这个项目叫做类库. 类库项目编译为.dll程序集.( ...