1.在类的头文件中尽量少引用其他头文件
使用“向前声明”方法
@classname;
2.多用字面量,少用与之等价的方法
使用字面量要点
- 对于字符串、数值、数组、字典,应尽量使用字面量创建
- 访问数组或字典,应尽量使用下标发来访问 例如:arr[1] dic[@”key1”]
- 创建字面量时,需要保证值中没有nil对象,否则会报异常
3.多用类型常量,少用#define预处理指令
- 对于常量的命名,一般用法是:
如果常量只是作用于当前的编译单元(就是当前的.m实现类),那么应该在常量的名称前加上k
如果常量还要作用于外部,需要以当前的类名为前缀
常量一定要用static const两个一起定义,因为我们本来就是希望它是一个常量,不能够被更改
还有一个原因,因为我们常量只作用于当前的.m类,如果不加上static,那么编译器在编译我们当前的类时,会给它加上一个外部符号(external symbol),如果其他类也定义了一个相同的同名变量,那么编译器就会报错
4.在对象内部尽量直接访问实例变量
- 在对象之外,我们知道总是通过属性(property)来对实例变量进行操作,那么在实例内部应该怎么做呢? 强烈建议在除了在懒加载中,其他情况下,都应该是:
在读取变量时,都应该采用直接访问的形式(_变量名),在设置实例变量时通过属性来设置
5.枚举
在Foundation框架中,定义了一些辅助的宏,在定义枚举时,我们经常使用这些宏来指定枚举的底层数据
typedef NS_ENUM(NSUInteger, PPSConnectionState){
PPSConnectionStateDisconnected,
PPSConnectionStateConnecting,
PPSConnectionStateConnected,
};
typedef NS_OPTION(NSUInteger, UIViewAutoresizing){
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
...
};
我们看到上面有两种方式的宏,那么我们应该怎样来选择呢
凡是需要以位或操作来组合枚举的都应使用NS_OPTION来定义
凡是枚举不需要组合,都应该使用NS_ENUM来定义