1: 在类的头文件中尽量 少 的引用其他头文件,尽量用 @class xxxxxx;

理解: 当你创建了一个 A 类,这个类又 需要具有 B 类的实例, 你可以直接为 A 类添加 B 类类型的 属性, 并引用 B 类的头文件 #import "B.h"

这种方法可行,但是不够优雅,在 编辑一个使用 A 类的文件时候, 不需要知道 B 类的全部细节, 只需要知道有一个 类名叫 B 就好, 所幸有个办法能把这一切情况告诉编辑器 @calss B;

这叫做 '向前声明' 该类

而 A 类的实现文件 .m文件 中则需要引入 B 类的头文件, #import "B.h" 因为若要使用后者, 则必须知道其所有的接口细节.

将引入头文件的时机尽量延后,只有确有需要时才引入, 这样就可以减少类的使用这所需引入头文件的数量, 假设 把 B.h 引入到 A.h 中, 那么只要进入 A.h, 就会一并引入 B.h 的所有内容, 此过程若继续下去, 则要引入许多根本用不到的内容, 这当然会增加编译时间.

向前声明 也解决了两个类互相引用的问题,  如果 A 类 和 B 类在各自的头文件中引入对方的头文件, 则会导致 "循环引用" ,当解析其中一个头文件时,编辑器会发现它引入的另一个头文件, 而那个头文件回过头引用第一个头文件, 使用 #import 而非 #include 指令虽然不会导致死循环, 单却以为着两个类有一个无法被正确编译

但是有时候必须要在头文件中引入其他头文件, 如果你写的类继承自某个超类, 则必须引入定义那个超类的 头文件, 同理, 如果要声明你写的类遵从某个协议, 那么该协议必须有完整定义, 且不能使用向前声明, 向前声明只能告诉编译器有某个协议, 而此时编译器却要知道该协议中定义的方法

总结: 除非确有必要, 否则不要引入头文件, 一般来说, 应该某个类的头文件中使用 向前声明 来提及别的类, 并在实现文件中引入那些类的头文件, 这样做可以尽量降低类之间的 耦合

2: 多用字面量语法, 少用预知等价的方法

// 字面量数值, 有时候要把证书. 浮点数 . 布尔值 封入 OC 对象中, 这种情况下可以用 NSNumber 类, 该类可以处理多种类型的数值, 若是不用字面量, NSNumber * somenumber = [NSNumber numberWitnInt:1];,  使用字面量  NSNumber* sonenumber = @1;, 它可以处理多种类型的数值.

// 字面量数组

NSArray *array = @[@"dog",@"cat"];

使用字面量语法创建数组时要注意, 若数组元素对象中 有 nil, 则会抛出异常, 因为自卖能量语法实际上只是一种 "语法糖", 其效果等于先创建一个数组, 然后把所有的对象都加到这个数组中

备注: 语法糖 也称 糖衣语法 ,是指计算机语言中与另外一套语法等效单是开发者用起来更加方便的语法. 语法糖 可另程序更易读, 减少代码出错几率

// 字面量字典与字面量数组 类似

// 可变数组与字典

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

NSMutableArray * mutable = [@[@1,@2,@3]mutableCopy];

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

应该通过取下标操作来访问数组下标或字典中的键所对应的元素

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

iOS -- Effective Objective-C 阅读笔记 (1)的更多相关文章

  1. iOS Testing with Xcode 阅读笔记

    官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...

  2. Effective Java, 3e阅读笔记一

    引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...

  3. QCon 2015 阅读笔记 - 其他精选主题

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...

  4. QCon 2015 阅读笔记 - 移动开发最佳实践

    所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...

  5. SDL源码阅读笔记(1) 基本模块

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...

  6. 《STL源代码剖析》---stl_deque.h阅读笔记(2)

    看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...

  7. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  8. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  9. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  10. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

随机推荐

  1. js call使用

    call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN ...

  2. oracle rman备份

    rman 登录到cmd 打开cmd 输入 rman connect target jhpt/1@orcl C:\Documents and Settings\Administrator>rman ...

  3. 关于"Linux下使用Windows应用程序的尝试"总结

    首推 Flatpak .Flatpak爽啊,命令行启动能不爽吗!? 其他的: 0. AppImage:AppImage试了下,唉,启动TIM时就没反应,其他的应用没试过 1. crossover:收费 ...

  4. C语言编程程序的内存如何布局

    重点关注以下内容: C语言程序在内存中各个段的组成 C语言程序连接过程中的特性和常见错误 C语言程序的运行方式 一:C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过 ...

  5. IT界的一些朗朗上口的名言

    序 中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影响潜移默化.这里收集了一些,如下. Sta ...

  6. java伪代码 大道至简第一章

    import.java.大道至简.*; //一·编程的精义 import.java.编程的精义.*; public class BIANCHENGDEJINGYI { if(愚公死了) 愚公的儿子,孙 ...

  7. Python非空即真,非零即真

    非空即真,非零即真 #1. 非空即真(只要输入不为空就是真) #username =''(空字典.空字符串.空元组都算空) # a= '' # b=[] # c={} # d=None (返回值是No ...

  8. jsonp实现下拉搜索

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. No compiler is provided in this environment. --Maven build失败

    今天,maven build 失败了, 遇到下面的问题 经过查找,通过这个大佬的blog(  https://blog.csdn.net/lslk9898/article/details/738367 ...

  10. python - 获取win系统参数,发送/保存配置

    import wmi import json c = wmi.WMI () msg = {} # 系统信息:系统版本,主机名,系统安装时间,系统位数,串口ID,总内存大小 system = ['Cap ...