编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记
编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记
这本书年初刷完,感觉不错,介绍了很多小点,都是平日不怎么关注的.
第1章 熟悉Objective-C
这章没什么好介绍
第1条:了解Objective-C语言的起源
第2条:在类的头文件中尽量少引入其他头文件
第3条:多用字面量语法,少用与之等价的方法
第4条:多用类型常量,少用#define预处理指令
要理解为啥要少用#define预处理指令. 然后具体用哪个, 自己定吧
第5条:用枚举表示状态、选项、状态码
第2章 对象、消息、运行期
第6条:理解"属性"这一概念
属性: 变量 + 方法 + 属性特质
第7条:在对象内部尽量直接访问实例变量
性能的一些优化
第8条:理解"对象等同性"这一概念
第9条:以"类族模式"隐藏实现细节
工厂模式
第10条:在既有类中使用关联对象存放自定义数据
类别里加属性
第11条:理解objc_msgSend的作用
传递消息
第12条:理解消息转发机制
动态方法解析: 向当前类发送 resolveInstanceMethod: 检查是否动态向该类添加了方法
快速消息转发: 检查该类是否实现了 forwardingTargetForSelector: 若实现了则调用这个方法. 若该方法返回值对象非nil或非self, 则向该返回对象重新发送消息.
标准消息转发: runtime发送 methodSignatureForSelector:, 消息获取Selector对应的方法签名. 返回值非空则通过forwardInvocation: 转发消息,返回值为空则向当前对象发送doesNotRecognizeSelector: 程序崩溃退出
第13条:用"方法调配技术"调试"黑盒方法"
就是method swizzling啦.不是很推荐滥用.
第14条:理解"类对象"的用意
其实就是 c-oop
第3章 接口与API设计
第15条:用前缀避免命名空间冲突
第16条:提供"全能初始化方法"
第17条:实现description方法
第18条:尽量使用不可变对象
这个不注意还真的会出问题
第19条:使用清晰而协调的命名方式
第20条:为私有方法名加前缀
写多了就知道了很多不做,迟早会遇到问题,没遇到是应为写的太少.
第21条:理解Objective-C错误模型
第22条:理解NSCopying协议
第4章 协议与分类
第23条:通过委托与数据源协议进行对象间通信
第24条:将类的实现代码分散到便于管理的数个分类之中
第25条:总是为#### 第三方类的分类名称加前缀
第26条:勿在分类中声明属性
第27条:使用"class-continuation分类"隐藏实现细节
第28条:通过协议提供匿名对象
有鸭子样的就是鸭子
第5章 内存管理
第29条:理解引用计数
内存管理的三种基本方式之一
第30条:以ARC简化引用计数
用arc让编程更加简洁
第31条:在dealloc方法中只释放引用并解除监听
第32条:编写"异常安全代码"时留意内存管理问题
第33条:以弱引用避免保留环
第34条:以"自动释放池块"降低内存峰值
第35条:用"僵尸对象"调试内存管理问题
第36条:不要使用retainCount
第6章 块与大中枢派发
第37条:理解"块"这一概念
闭包(在函数对象中,将局部变量这一环境封闭起来的结构)在oc下的具体实现
第38条:为常用的块类型创建typedef
第39条:用handler块降低代码分散程度
第40条:用块引用其所属对象时不要出现保留环
#define DEF_WEAKSELF __weak __typeof(self) weakSelf = self;
#define DEF_STRONGSELF __strong __typeof(weakSelf) self = weakSelf;
第41条:多用派发队列,少用同步锁
第42条:多用GCD,少用performSelector系列方法
第43条:掌握GCD及操作队列的使用时机
第44条:通过Dispatch Group机制,根据系统资源状况来执行任务
第45条:使用dispatch_once来执行只需运行一次的线程安全代码
第46条:不要使用dispatch_get_current_queue
当心死锁
第7章 系统框架
第47条:熟悉系统框架
第48条:多用块枚举,少用for循环
第49条:对自定义其内存管理语义的collection使用无缝桥接
第50条:构建缓存时选用NSCache而非NSDictionary
第51条:精简initialize与load的实现代码
第52条:别忘了NSTimer会保留其目标对象
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。