笔记
2.在类的头文件中尽量少引用其他头文件
1.尽量使用向前声明@class
2.委托协议直接写在类中
3.公共协议抽写成单独文件
4.在分类中引用协议
3.多使用字面量语法
1.常量 @"abc" @1 @1.2f @YES @'a' @(x+y)
2.数组 @[@"one",@"two",@"three"]
3.字典 @{@"firstname":@"peng",@"lastname":"yuliang",@"age":@100}
4.可变 NSMutableArray *arrM=[@[@"one",@"two"] mutableCopy];
5.结构体 CGSize size={1,3};
4.多用类型常量,少用#define预处理指令
1.只在编译单元内可见的常量(k开头)
.m
static const int kNum=256;
static NSString *const kID=@"ID";//从右往左读
2.全局常量(以类名打头)
.h
extern NSString *const ClassNameID;
@interface ClassName:NSObject
@end
.m
NSString *const ClassNameID=@"ID"
@implementation ClassName
@end
5.用枚举表示状态、选项、状态码
1.2的幂枚举实现多选
enum Direction{
kNone = 0,
kUp = 1<<0,
kDown = 1<<1,
kLeft = 1<<2,
kRight = 1<<3
};
Direction dir=kUp|kLeft;//按位或
if (dir&kUp) {//按位与
NSLog(@"up");
}
if (dir&kDown) {
NSLog(@"down");
}
2.如果枚举不需要互相组合,使用NS_ENUM ("可指明其底层数据类型")
typedef NS_ENUM(short, Direction){
kUp,
kDown,
kLeft,
kRight
};
3.如果枚举需要互相组合,使用NS_OPTIONS ("主要是为了屏蔽不同编译器差异,底层进行了宏判断")
typedef NS_OPTIONS(NSInteger, Direction) {
kUp = 1<<0,
kDown = 1<<1,
kLeft = 1<<2,
kRight = 1<<3
};
6.@property
1.正确使用属性@property的attribute语义定义
2.iOS中使用nonatomic,因为默认atomic会严重影响性能
7.在对象内部尽量直接访问实例变量,属性存取本质都要经过消息传递调用
1.对象内部直接通过实例变量读,copy属性需要通过属性写,需要KVO监测的通过属性写
2.在初始化方法或dealloc中,总是应该直接通过实例变量来读写数据
3.实现"懒加载(惰性初始化)"的,通过属性读取
8.对象等同性监测
1.isEqualToString:速度要比isEqual:快,类似有isEqualToArray:isEqualToDictionary
2.若要检测对象等同性,请提供isEqual:与hash方法
3.两个对象相同则哈希码相同,哈希码相同的两个对象不一定相同
4.编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算法
9.以"类族模式"隐藏实现细节(class cluster)
1.工厂模式是创建类族的方法之一
2.Cooca中有许多类族,大部分collection类都是类族
10.使用前缀避免命名空间冲突
1.3个字母以上,因为苹果公司保留使用所有两个字母前缀的权利
2.给所有类、分类、分类方法、.m中C函数、全局变量等使用前缀
3.使用第三方库也加上前缀
11.提供"全能初始化方法"
1.在类中提供一个全能初始化方法,并于文档里指明。其他初始化方法均调用此方法
2.若全能初始化方法与超类不同,则需要覆写超类中的对应方法
3.如果超类的初始化方法不适用于子类,那么应该覆写这个超类方法,并在其中抛出异常
12.尽量创建不可变对象
13.使用清晰而协调的命名方式
14.自动引用计数ARC
1.ARC不是用的消息转发机制调用retain、release等而是直接调用的底层与之等价的C函数objc_retain等提升性能
2.ARC有时甚至比手动更优化,比如如果一个对象被多次retain release,ARC可以精简这个过程成对移除这些操作
3.ARC还有运行时组件进一步优化性能
ARC开启异常捕获生成安全处理异常所需的清理的代码 -fobjc-arc-exceptions,不过会影响性能,默认关闭
15.扩展中改变只读属性可读写使之可内部赋值
16.用handler块降低代码分散程度
17.多用派发队列少用同步锁
18.多用GCD,少用performSelector系列方法
19.多用块枚举,少用for循环
NSArray *arr=@[@"one",@"two",@"three"];
[arr enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse usingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@",obj);
}];
NSEnumerationConcurrent //开启块并发执行
OC进阶必读
《Effective Objective-C 2.0》热门书评
-
千万不要买啊,这本书是他妈用金山词霸翻译的啊
18有用 8无用 。邢捕頭、 2014-03-14
retain cycle 翻译成 "保留环"GCD 翻译成 "大中枢派发"这是什么情况,某民间翻译群里的群众们均表示亮瞎了。普遍表示如果光看"保留环"还真是联想不到"retain cycle",译者是特么猴子派来的逗逼么...
-
OC进阶必读
3有用 0无用 良呵呵 2015-08-23
笔记2.在类的头文件中尽量少引用其他头文件 1.尽量使用向前声明@class 2.委托协议直接写在类中 ...
-
很多东西似曾相识,但绝对是好书。
3有用 0无用 zijianz 2014-07-03
很多技巧其实并不仅仅是Obj-C的,而是写程序通用的,就比如forward declaration在Google C++ Style里也提过。Reference Counting也是老生常谈,古老的Java都有这个卖点。从作者对每一个技巧的解释来看,其真的很了解Obj-C。Obj-C不像C有很多经典...
-
直接看英文版吧
1有用 5无用 柠檬鲨 2014-03-30
翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了,完全受不了翻译的太业余了...
-
还是原版好
1有用 0无用 先吃饭 2015-08-25
一开始要买这本书,我是拒绝的,因为你们都说翻译差,所以我去C某DN下载了英文原版,还带书签。看了几页之后发现,卧槽!这么棒的书必须买实体书收藏啊!!但是原版书亚马逊400+的价格真的╮(╯-╰)╭,所以就买本中文版吧,毕竟中文看着也快嘛。。。。。拿到货之后我就呵呵了,薄薄的两百页居然要69的定价!!...
书名: Effective Objective-C 2.0
作者: [美] Matt Galloway
出版社: 机械工业出版社
原作名: Effective Objective-C 2.0: 52 Specific Ways to Improve Your iOS and OS X Programs
副标题: 编写高质量iOS与OS X代码的52个有效方法
译者: 爱飞翔
出版年: 2014-1
页数: 220
定价: 69.00元
装帧: 平装
丛书: Effective系列丛书
ISBN: 9787111451297