您的位置:首页 > 移动开发 > Objective-C

《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》笔记

2018-01-15 00:00 429 查看
这本书很早有了解过,评价都不错,但最近才终于把这本书看完,整本书介绍了很多个提高Objective-C的方法,都是平时用得很多但是没有注意使用的,下面对这些方法做一些小总结。

第1章 熟悉Objective-C

第1条:了解Objective-C语言的起源

Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,运行时才决定执行何种代码

第2条:在类的头文件中尽量少引入其他头文件

减少头文件的引入,多使用声明提及别的类

第3条:多用字面量语法,少用与之等价的方法

第4条:多用类型常量,少用#define预处理指令

在头文件中使用extern来声明全局变量,并在相关实现文件中定义其值

第5条:用枚举表示状态、选项、状态码

应该用枚举来表示状态机的状态、传递给方法的选项以及状态码等值,代码中少用基本数据类型表示状态选项等

第2章 对象、消息、运行期

第6条:理解"属性"这一概念

多用属性来定义对象中的数据变量,属性: 变量 + 方法 + 属性特质

第7条:在对象内部尽量直接访问实例变量

在dealloc方法中,总是应该直接通过实例变量来读写数据。

第8条:理解"对象等同性"这一概念

对象判断可以使用哈希码判断

第9条:以"类族模式"隐藏实现细节

类族模式编写公共接口

第10条:在既有类中使用关联对象存放自定义数据

类别里加属性

第11条:理解objc_msgSend的作用

动态消息派发系统

第12条:理解消息转发机制

标准消息转发: runtime发送 methodSignatureForSelector:, 消息获取Selector对应的方法签名. 返回值非空则通过forwardInvocation: 转发消息,返回值为空则向当前对象发送doesNotRecognizeSelector: 程序崩溃退出

第13条:用"方法调配技术"调试"黑盒方法"

就是method swizzling啦,不是很推荐滥用.

第14条:理解"类对象"的用意

区分类和对象

第3章 接口与API设计

第15条:用前缀避免命名空间冲突

Apple宣称其保留使用所有“两字母前缀”(two-letter prefix)的权利,所以我们加的前缀最好三个字母为宜。

第16条:提供"全能初始化方法"

如果超类的初始方法不适用与子类,那么应该重写这个超类的方法,并在其中抛出异常。

第17条:实现description方法

自定义返回一个有意义的字符串。

第18条:尽量使用不可变对象

readonly属性限制外部修改属性

第19条:使用清晰而协调的命名方式

方法名里不要使用缩略后的类型名称

第20条:为私有方法名加前缀

不要单用一个下横线做私有方法的前缀,父类很可能已经使用

第21条:理解Objective-C错误模型

适当时候在代码抛出异常

第22条:理解NSCopying协议

第4章 协议与分类

第23条:通过委托与数据源协议进行对象间通信

第24条:将类的实现代码分散到便于管理的数个分类之中

第25条:总是为第三方类的分类名称加前缀

第26条:勿在分类中声明属性

第27条:使用"class-continuation分类"隐藏实
7fe8
现细节

第28条:通过协议提供匿名对象

第5章 内存管理

第29条:理解引用计数

内存管理的三种基本方式之一

第30条:以ARC简化引用计数

用ARC让编程更加简洁,CoreFoundation对象不归ARC管理,必须适时调用CFRetain/CFRelease

第31条:在dealloc方法中只释放引用并解除监听

执行异步任务的方法不应在dealloc里调用

第32条:编写"异常安全代码"时留意内存管理问题

使用try时要记得清理对象,try会降低运行效率,真的遇到异常情况的时候,应该检查代码,而不是盲目使用try。

第33条:以弱引用避免保留环

将某些引用设为weak,可避免循环引用

第34条:以"自动释放池块"降低内存峰值

某些循环语句中可以用到,减低内存峰值

第35条:用"僵尸对象"调试内存管理问题

第36条:不要使用retainCount

ARC下retainCount已经废止

第6章 块与大中枢派发

第37条:理解"块"这一概念

第38条:为常用的块类型创建typedef

第39条:用handler块降低代码分散程度

第40条:用块引用其所属对象时不要出现保留环

循环应用问题

第41条:多用派发队列,少用同步锁

派发队列更简单高效

第42条:多用GCD,少用performSelector系列方法

执行异步线程任务GCD机制更优

第43条:掌握GCD及操作队列的使用时机

第44条:通过Dispatch Group机制,根据系统资源状况来执行任务

第45条:使用dispatch_once来执行只需运行一次的线程安全代码

第46条:不要使用dispatch_get_current_queue

ispatch_get_current_queue主要用于解决由不可重入的代码引起的死锁

第7章 系统框架

第47条:熟悉系统框架

第48条:多用块枚举,少用for循环

最新、最先进的方式

第49条:对自定义其内存管理语义的collection使用无缝桥接

第50条:构建缓存时选用NSCache而非NSDictionary

NSCache提供自动删减功能,线程安全,不会拷贝键

第51条:精简initialize与load的实现代码

load的方法不参与覆写机制,在类加载的时候只调用一次

第52条:别忘了NSTimer会保留其目标对象

用block来打破NSTimer引起的循环引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐