编写高质量iOS与OS X代码的52个有效方法 读后感
只在此总结一些项目中容易忽略的点,可能后期会补充,因为有些块我暂时也没想到怎么总结,所以暂时只有这些。
- 在类的头文件(.h文件)尽量使用@class(向前声明),在类的实现文件(.m文件)中引入需要的头文件,既可以解决相互引用发生的错误,又可以减少编译的时间。
- 多用字面量语法,少用与之等价方法,如NSArray = @[@"hello", @"world"];
这种语法糖可以更直观的了解其数组或者字典元素,但是一定要注意,确保每个元素都有值,不能为nil,否则会抛出异常。
- 多用类型常量,少用#define
预处理指令,因为#define
会增加内存,并且无法定义数据类型。考虑到多人开发,可以创建一个类来统一管理常用的类型常量。推荐苹果官方定义这种UIKIT_EXTERN NSString *const valueName
; 如果该类型常量仅在对应的编译单元内使用,则可使用static const
关键字来修饰,直接定义在当前的编译单元内。
- 用枚举表示状态、选项,当状态或者选项固定时采用switch判断其条件时可以不写default,这样做的好处是当所传参数不在枚举的类型之中时编译器会报错,当然这就要求开发者编写代码时要对代码执行有充分的认识。
- 用前缀避免命名空间冲突,建议前缀用大于等于三个的字母,因为两个字母的专利已经被苹果所占有了,说不定哪天苹果就搞一个两个字母的系统前缀。
- 提供全能初始化方法,尽量减少外部暴露的变量为可编辑的。防止外部意外修改类的属性。
- 为私有方法加上前缀,比如p_privateryAction
。
- 当代理次数调用频繁时,可以定义一个BOOL值,然后在setDelegate:
方法中通过responsToSelector
方法设置这个BOOL值,从而在下次回调代理方法的时候只需要判断这个值即可,而不需要每次都通过responsToSelector
判断是否设置了代理并实现了代理方法。
- 以“自动释放池快”(autorelease)来降低内存峰值。最简单的就是在for循环中,当for循环中需要不断创建临时对象时,这个时候,因为当前的线程还没有执行下一次事件,所以此时临时对象会保存在内存当中不会释放。所以可以采用下面这种方式:
for (int i = 0; i < 10000; i++) {
@autoreleasepool {
Person *person = [[Person alloc] init];
[_mutableArr addObject:person];
}
}
推荐阅读
-
[编写高质量iOS代码的52个有效方法](十)Grand Central Dispatch(GCD)
-
[编写高质量iOS代码的52个有效方法](十一)系统框架
-
[编写高质量iOS代码的52个有效方法](一)Objective-C基础
-
[编写高质量iOS代码的52个有效方法](五)接口与API设计(下)
-
[编写高质量iOS代码的52个有效方法](八)内存管理(下)
-
编写高质量iOS与OSX代码的52个有效方法-第四章:协议与封装
-
Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(Matt Galloway著)读书笔记(一)
-
编写高质量iOS与OS X代码的52个有效方法 读后感
-
[编写高质量iOS代码的52个有效方法](十)Grand Central Dispatch(GCD)
-
[编写高质量iOS代码的52个有效方法](十一)系统框架