1.在类的头文件中尽量少引入其他头文件
a.多使用向前声明@class
b.无法使用向前声明的(比如某个类需要遵循一项协议),可以使用分类
2.多使用字面量语法,少用与之等价的方法
优点:简单,易理解,减少代码出错率(如果值为nil会报异常)
3.多用类型常量, 少用#define预处理指令
#define ANIMATION_DURATION 0.3
缺点:1>没有类型提示, 2>如果放在头文件,所以包含该头文件的 文件都会执行替换
static const NSTimeInterval kAnimationDuration = 0.3
注:常量命名如果局限与某个实现文件用k开头, 若常量在类之外可见,则通常用类名为前缀
只是编译单元之内用,放在.m 如果其他被import的类也要使用,放在.h
类似通知名这类字符串,也可定义为常量
//In the header file 声明
extern NSString *const EOCStringConstant; //EOCStringConstant是常量, 这个常量是个指针,指向NSString对象
//In the implementation file 实现
NSString *const EOCStringConstant = @"VALUE";
注意:在使用extern的时候,常量名要使用类名作为前缀, UIKit就是按照这种方式来命名的,如UIApplicationDidEnterxxx
extern 编译器看到extern关键字,就能明白如何在此类头文件的代码中处理该常量了
.这个关键字是要告诉编译器,在全局符号表中将会有一个名叫EOCStringConstant的符号
也就是说,编译器无需查看定义,即允许代码使用此常量,因为它知道,当链接成二进制文件后,肯定能找到该常量
编译后,会在"数据段data section"为字符串分配存储空间
const 常量,不可修改. 注意const的位置, 常量定义应从右->左解读
static 只限编译单元可用
4.用枚举标识状态,选项,状态码
typedefNS_ENUM(NSUInteger,EOCConnectionState) {
EOCConnectionStateDisconnected,
EOCConnectionStateConnecting,
EOCConnectionStateConnected
};
typedefNS_OPTIONS(NSUInteger, EOCPermittedDirection) {
EOCPermittedDirectionLeft =1<<0,
EOCPermittedDirectionDown =1<<1,
EOCPermittedDirectionRight=1<<2,
EOCPermittedDirectionUp =1<<3
};