@MicroCai
2016-05-20T12:11:17.000000Z
字数 1182
阅读 3153
Effective Objective-C Notes:概览
Archives
iOS
《Effective Objective-C Notes》系列博文整理自《Effective Objective-C 2.0》
熟悉 Objective-C
- 了解 Objective-C 语言起源;
- 在类的头文件中尽量少引入其他头文件;
- 多用字面量语法(literal syntax),少用与之等价的方法;
- 多用类型常量,少用 #define 预处理指令;
- 用枚举表示状态、选项、状态码;
对象、消息、运行时
- 理解“属性”这一概念;
- 在对象内部尽量直接访问实例变量;
- 理解“对象等同性”这一概念;
- 以“类簇模式”隐藏实现细节;
- 在既有类中使用关联对象存放自定义数据;
- 理解 objc_msgSend 的作用;
- 理解消息转发机制;
- 用“方法调配(method swizzling)技术”调试“黑盒方法”
- 理解“类对象”的用意;
接口与 API 的设计
- 用前缀避免命名空间冲突;
- 提供“指定初始化(designated initializer)方法”;
- 实现 description 方法;
- 尽量使用不可变对象;
- 使用清晰而协调的命名方式;
- 为私有方法加前缀;
- 理解 Objective-C 错误模型;
- 理解 NSCopying 协议;
协议与分类
- 通过委托与数据源协议进行对象间通信;
- 将类的实现代码分散到便于管理的数个分类(Category)之中;
- 总是为第三方类的分类(Category)名称加前缀;
- 勿在分类(Category)中声明属性;
- 使用“类扩展”(class-continuation category)隐藏实现细节;
- 通过协议提供匿名对象;
内存管理
- 理解引用技术;
- 以 ARC 简化引用技术;
- 在 dealloc 方法中只释放引用并解除监听;
- 编译“异常安全代码”时留意内存管理问题;
- 以弱引用避免保留环;
- 以“自动释放池”降低内存峰值;
- 用“僵尸对象”(zombie object)调试内存管理问题;
- 不要用 retainCount;
Block 与 GCD
- 理解 block 的概念;
- 为常用的 block 类型创建 typedef;
- 用 handler block 降低代码分散程度;
- 用 block 引用其所属对象时,不要出现循环引用;
- 多用 dispatch 队列,少用同步锁;
- 多用 GCD,少用 performSelector 系列方法;
- 掌握 GCD 及 operation queue 的使用时机;
- 通过 dispatch group 机制,根据系统资源状态来执行任务;
- 使用 dispatch_once 来执行只要运行一次的线程安全代码;
- 不要使用 dispatch_get_current_queue;
系统框架
- 熟悉系统框架;
- 多用 block 枚举,少用 for 循环;
- 对自定义内存管理语义的 collection 使用无缝桥接;
- 构建缓存时选用 NSCache,而非 NSDictionary;
- 精简 initialize 与 load 的实现;
- 别忘了 NSTimer 会保留其 target 对象;