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. 四十二、Linux 线程——线程同步之条件变量之线程状态转换

    42.1 线程状态转换 42.1.1 状态转换图 42.1.2 一个线程计算,多个线程获取的案例 #include <stdio.h> #include <stdlib.h> ...

  2. c#调用WebService实例

    在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作.在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序,名 ...

  3. 【PgSQL安装(含配置)】PostgreSQL简称PgSQL,是1980以加利福尼亚大学开发的DBMS,严格遵守标准SQL。

    [下载地址]http://www.enterprisedb.com/products-services-training/pgdownload#windows …………………………………………………… ...

  4. tensorflow/core/kernels/conv_ops.cc:659] check failed: stream->parent()->getc

    tensorflow版本与cudnn版本不对应,如tensorflow-gpu==1.1.0,cudnn==6.0 升级tensorflow-gpu到更高版本

  5. Docker 容器文件导出 - 六

    Docker 容器 导入导出 导入:import 导出:export 打tar包导出容器 nginx1 的文件系统: # docker export nginx1 > nginx1.tar.gz ...

  6. Java基础_0308:String类的常用方法

    取出指定索引的字符 -- 使用charAt()方法 public class StringDemo { public static void main(String args[]) { String ...

  7. 帝国cms建站方法和知识点

    帝国cms建站方法和知识点 1.  首先在帝国cms网站上下载模板系统.根据模板系统上的提示,将指定的目录文件放在指定的位置.然后进行安装.后台管理系统的命名设置.数据库的设置等等. 2.  安装完成 ...

  8. 【blog】推荐一个博客系统后台管理模板 - pinghsu

    pinghsu https://github.com/chakhsu/pinghsu

  9. 1259 整数划分 V2

    设dp[n]为整数n的分割函数,由五边形定理得到: dp[n] = dp[n-1] + dp[n-2] - dp[n-5] - dp[n-7]…… 我们将其分为两部分计算 第一部分为 :( dp[n- ...

  10. GeoDesc: Learning Local Descriptors by Integrating Geometry Constraints

    这篇论文提出了一种新的局部描述子学习方法,有一些点值得学习,记录下来以供参考.文章中涉及了一些3D reconstruction.structure from 的知识,不是很了解,所以理解可能有偏颇. ...