Effective Objective-C2.0读书笔记 开篇


编写高质量iOS和OS X代码的52个有效方法

本篇博客主要是自己的一些笔记,如果要了解详细,还请阅读书本。推荐!!!


Effective Objective-C2.0读书笔记 开篇_第1张图片

第一章笔记  (书中提到的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语句.

你可能感兴趣的:(Effective Objective-C2.0读书笔记 开篇)