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图的利用 ... 
随机推荐
- angularjs路由path方式实现原理探究
			angularjs路由 https://angular.io/guide/router 通过URL解释, 来定位客户端生成的浏览器端视图. 你可绑定路由到页面的链接上, 当用户点击链接, 可以浏览到相 ... 
- linux上安装mysql,tomcat,jdk
			Linux 上安装 1 安装jdk 检测是否安装了jdk 运行 java –version 若有 需要将其卸载 a) 查看安装哪些jdk rmp –qa |grep java b) ... 
- ie8 background背景图片不显示问题
			在chrome,FF可以显示,但是在ie8背景图片显示不出来 css改为如下可以正常显示: background: url(../images/goods.png) no-repeat !import ... 
- js获取当前城市名
			<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ... 
- antd card 组件实现鼠标移入移出效果
			鼠标移出: 鼠标移入: import React, { Component } from 'react' import { Card, Icon, Avatar } from 'antd'; cons ... 
- TensorFlow从入门到理解
			一.<莫烦Python>学习笔记: TensorFlow从入门到理解(一):搭建开发环境[基于Ubuntu18.04] TensorFlow从入门到理解(二):你的第一个神经网络 Tens ... 
- 2017CCPC秦皇岛 G题Numbers&&ZOJ3987【大数】
			题意: 给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小. 思路: 从二进制的角度分析,如果这m个数中有一个数某一位为1,那么最后或起来这一位肯定是为1的, ... 
- Vue中的双向数据绑定简单介绍
			1. 文本框绑定v-module <div id="app"> <input type="text" v-model="msg&qu ... 
- Java基础_0311: 数据表与简单Java类映射
			数据表与简单Java类映射 现在假设有如下的关系表,现在要求实现如下的数据关联操作: 一个部门有多个雇员: 一个雇员有一个或零个领导 代码实现 class Dept { private int dep ... 
- Log4Net配置日志
			1.log4net 1)新建一个Net空白项目,在引用出点击管理NuGet程序包,搜索log4net并安装 2)建立log4net.config配置文件 在configuration里面添加如下代码, ... 
