编写高质量iOS和OS X代码的52个有效方法
本篇博客主要是自己的一些笔记,如果要了解详细,还请阅读书本。推荐!!!
第一章笔记 (书中提到的class-continuation分类是指.m文件的私有扩展,并非category)
1. 尽量用@class来做”向前声明”,在需要的时候import
减少使用者引入的头文件数量,如果引用的头文件用不到,会增加编译时间;
import还有可能导致循环引用的问题
2. 协议的遵守最好放在类的私有扩展当中
3. 关于oc中的协议
和java中的接口类似 ,用于对象之间相互通信的同时,又能解耦;
委托模式的遵旨:定义一套接口,代理对象遵守此接口。原来对象就可以给代理回传一些信息,也可以在发生相关事件时通知代理;
此模式可以讲数据和业务逻辑解耦; 例如 “数据源” 和 “委托” 。
声明代理用weak,避免保留环的形成;因为一般情况代理对象会持有原对象;
设计方法时一般将原来对象传给代理; 这样代理能根据实例执行不同的代码;
缓存委托对象,如果协议中的方法都是可选的,那么程序中可能会有一大堆, responseToSelector,这时候可以把某个委托对象是否能够响应某个协议缓存起来;优化程序效率;
自己总结:用该模式来实现不同对象间的异步通信;比如网络请求,不知道什么时候回来;一些UI事件不知道什么时候触摸时;该模式在通信时是低耦合的,代理一般是id;
4. 多用字面量 少用与之等价的方法
多用NSString *someStr = @"abcd"; 少用NSString *someStr2 = [NSString stringWithFormat....];NSNumber NSArray NSDictionary都是如此
代码整洁 便于阅读 没有多余的语法成分
数组用字面量的好处:
id obj1 = /…/
id obj2 = /…/
id obj3 = /…/
NSArray *arrA = [NSArray arrayWithObjects: obj1, obj2, obj3, nil];
NSArray *arrB = @[obj1, obj2, obj3]
// 上边的代码中如果obj2是nil,arrB会抛出异常,原因是数组中有空对象;而arrA数组中只有obj1一个对象,原因是通过方法创建数据,结束标志就是nil;
局限性: 利用字面量创建可变版本时候需要拷贝一份
NSMutableArray *mutable = [@[@1, @2, @3] mutableCopy]
5. 多用类型常量 少用#define
利用static和extern来管理作用域
// .h文件
extern NSString *const SomeStr;
// .m 文件
NSString *const someStr = @"someStr";
6. 用枚举表示状态 选项 状态码
每个枚举值可以用1<<0, 1<<1,来赋值;这样用"按位或操作符"组合多个枚举的二进制值;例如系统的UIViewAutoresizing.
如果用枚举表示状态机,在switch语句中最好不要有default语句.
网友评论