iOS -- Effective Objective-C 阅读笔记 (1)
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)的更多相关文章
- iOS Testing with Xcode 阅读笔记
官方文档直通车 Performance Testing A baseline is a combination of the average time performance in ten runs ...
- Effective Java, 3e阅读笔记一
引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...
- QCon 2015 阅读笔记 - 其他精选主题
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...
- QCon 2015 阅读笔记 - 移动开发最佳实践
所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...
- SDL源码阅读笔记(1) 基本模块
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 前言 对于大牛来说,写关于阅读源码的文章都会叫源码剖析或者深入浅出啥的,对于我,自己阅读阅读源码,写 ...
- 《STL源代码剖析》---stl_deque.h阅读笔记(2)
看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
随机推荐
- 【bzoj 2588】Spoj 10628. Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- PHP中遍历二维数组—以不同形式的输出操作
<body> <?php //定义二维索引数组$arr = array( array("101","李军","男", ...
- group by having 判断重复的有几条数据
判断字段id和字段zhi重复的条数 group by 和having 解释:前提必须了解sql语言中一种特殊的函数:聚合函数,--例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根 ...
- 查看 Linux memory 内存占用
linux 系统内存: 如果系统内存使用过高 就会产生 out of memory exception 现象: 通常 在mongo 默认服务运行资源是不受限制的.也会占用而同一系统运行的其他服务: 当 ...
- 第21月第4天 leetcode codinginterview c++
1.leetcode Implement strStr(). Returns the index of the first occurrence of needle in haystack, or - ...
- web请求流程
具体流程解析参考文章:浏览器请求发起处理
- python 09
1.函数进阶: 函数动态参数: 动态位置参数 *args 动态关键字参数 **kwargs 位置 > 动态位置参数 > 默认(关键字)参数 > 动态关键字参数 2.命名空间 局部命名 ...
- Jquery中AJAX参数详细(1)-转
http://www.cnblogs.com/qiufuwu618/archive/2012/12/20/2826190.html Jquery中AJAX参数详细列表: 参数名 类型 描述 url S ...
- 操作dom影响性能的原因
为什么dom操作会影响性能? 在浏览器当中,dom的实现和ECMAScript的实现是分离的. 例如,在IE中,ECMAScrit的实现在jscript.dll中,而DOM的实现在mshtml.dll ...
- openstack Q版部署-----Cinder云存储服务(10)
一.cinder介绍 一般 cinder-api 和 cinder-scheduler 安装在控制节点上, cinder-volume 安装在存储节点上. 二.数据库配置 # 在任意控制节点创建数据库 ...