《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条:理解“块”的概念

posted @ 2016-01-07 11:16  孙焱焱  阅读(197)  评论(0编辑  收藏  举报