iOS开发技术Objective-CiOS Developer

Effective Objective-C 2.0笔记

2016-05-30  本文已影响85人  gamper

一 熟悉Objective-C

  1. 了解Objective-C语言的起源
  2. 在类的头文件中尽量少引入其他头文件
  1. 多用字面量语法,少用与之等价的方法
  1. 多用类型常量,少用#define预处理指令
  1. 用枚举表示状态、选项、状态码

二 对象、消息、运行期

  1. 理解“属性”这一概念
  1. 在对象内部尽量直接访问实例变量
  1. 理解“对象等同性”这一概念
    NSString *foo = @"Badger 123";
    NSString *bar = [NSStringWithFormat:@"Badger %i",123];
    BOOL equalA = (foo == bar); //< equalA = NO
    BOOL equalB = [foo isEqual:bar]; //< equalB = YES;
    BOOL equalC = [foo isEqualToString:bar]; //<equalC = YES;
  1. 以“类族模式”隐藏实现细节
  2. 在既有类中使用关联对象存放自定义数据
  3. 理解objc_msgSend的作用
  4. 理解消息转发机制


    Paste_Image.png
  5. 用“方法调配技术”调试“黑盒方法”
  6. 理解“类对象”的用意

三 接口与API设计

  1. 用前缀避免命名空间冲突
  1. 提供“全能初始化方法”
  2. 实现description方法

该类的的description方法通常可以这样实现:
-(NSString *)description{
return[NSString stringWithFormat:@"<%@: %p,"%@ %@">",[self class],self,_firstName,_lastName];
}
输出如下格式信息:
EOCPerson person = [[EOCPerson alloc] initWithFirstName:@"Bob" lastName:@"Smith"];
NSLog(@"person = %@",person];
//output
person=<EOCPerson: 0x7fb249c030f0,"Bob Smith">
或者用NSDictionary类的description方法
- (NSString
)description {
return [NSString stringWithFormat:@"<%@: %p, %@>",
[self class],
self,
@{@"title":_title,
@"latitude":@(_latitude),
@"longitude":@(_longitude)}
];
}

  1. 尽量使用不可变对象
  2. 使用清晰而协调的命名方式
  1. 为私有方法名加前缀
  2. 理解Objective-C错误模型
  3. 理解NSCopying协议

四 协议与分类

  1. 通过委托与数据源协议进行对象间通信
  2. 将类的实现代码分散到便于管理的数个分类之中
  3. 总是为第三方的分类名称加前缀
  4. 勿在分类中声明属性
  5. 使用“class-continuation分类”隐藏实现细节
  6. 通过协议提供匿名对象

五 内存管理

  1. 理解引用计数
  2. 以ARC简化引用计数
  3. dealloc方法中只释放引用并解除监听
  4. 编写“异常安全代码”时留意内存管理问题
  5. 以弱引用避免保留环
  6. 以“自动释放池”降低内存峰值
  7. 用“僵尸对象”调试内存管理问题
  8. 不要使用retainCount

六 块与GCD

  1. 理解“块”这一概念
  1. 为常用的块类型创建typedef
  1. 用handler块降低代码分散程度
  2. 用块引用其所属对象时不要出现保留环
  3. 多用GCD,少用同步锁
  4. 多用GCD,少用performSelector系列方法
  1. 掌握GCD及操作队列的使用时机
  1. 通过Dispatch Group机制,根据系统资源状况来执行任务
  2. 使用dispatch_once来执行只需运行一次的线程安全代码
  3. 不要使用dispatch_get_current_queue

七 系统框架

  1. 熟悉系统框架
  2. 多用块枚举,少用for循环
  1. 对自定义其内存管理语义的collection使用无缝桥接
  2. 构建缓存是选用NSCache而非NSDictionary
  3. 精简initialize与load的实现代码
  4. 别忘了NSTimer会保留其目标对象
上一篇下一篇

猜你喜欢

热点阅读