《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》
《Effective Object-C 2.0 编写高质量IOS与OS X代码的52个有效方法》
1 、在类的头文件中尽量少引入其他头文件
- 使用@class代替import,还可以解决相互引用的问题。
- 协议和代理可以放在小的头文件中,但不要放在大的头文件中减少耦合。
2、用类型常量代替预编译指令
- 局部变量在实现文件中定义:static const NSTimerInterval kAnimationDuration = 0.3;
- 全局变量(或者是只会在当前类中使用,但是又不想全局有相同的变量,类似通知名称变量):
- 在头文件中: extern NSString *const EOCStringConstant;
- 在实现文件中: NSString *const EOCStringContant = @"VALUES";
3、使用枚举来表示状态码
- 处理枚举的switch语句最好不要带有default语句。
4、为属性添加特质(修饰词)
5、在对象内部直接访问变量(用 _变量 ),而在对象内部设置属性时,采用属性来访问
- 直接访问变量比使用属性快,而设置变量时用属性方便调试
6、使用工厂方法创建类组
7、写可重用代码时,为其加上前缀
8、全能初始化方法
- 如果一个类有多个初始化方法,则为他们写一个全能初始化方法,每个初始化方法都会调用全能初始化方法。
- 优势是当底层数据变化时,只需要修改全能初始化方法,其他的初始化方法就不需要改动。
9、实现description方法
- 方便调试
- 在debugger模式中也需要实现debugDespriction方法
10、命名方式
- 驼峰法:变量和方法都是以小写字母开头,之后单词首字母大写(类的首字母大写)
- 具体方法的命名可以参考NSString
11、为私有方法添加前缀
- 不要使用前缀 _ (这是苹果预留的前缀)
12、错误处理
- 程序只处理致命错误(使程序退出的错误)
- 自己处理时使用nil,或者自己把错误的详细信息放在NSError中
13、类别的使用
- 使用类别将类模块化,将其实现分到各个类别中
- 为第三方类添加类别时,加上自己的特有前缀
- 分类中不要定义属性
14、使用弱引用避免保留环
15、使用dispatch_group来使任务分组
- 使用dispatch_group_notify 或者 dispatch_group_wait 在group任务执行完执行下一步任务
16、遍历
- 使用NSENumerator遍历
- 使用for in 快速遍历
- 基于块的遍历 例如:enumerateObjectsUsingBlock
17、熟悉系统框架 包括但不限于:
- CFNetwork
- CoreAudio
- AVFoundation
- CoreData
- CoreText
18、构建缓存时选用NSCache 而不是NSDictionary
19、NSTimer会保留目标对象
- 容易形成保留环,造成内存泄露
- 当NStimer失效时会释放目标对象
- 可以为NSTimer添加方法,用块来打破保留环
待深究:
第11条:理解objc_msgSend的作用
第12条:理解消息转化机制
第13条:用“方法调配技术”调试“黑盒方法”
第14条:理解“类对象”的用意
第29条:理解引用计数
第37条:理解“块”的概念