1.在类的头文件中尽量少引入其他头文件
a.可以使用向前声明(forward declaring),降低耦合度。枚举类型也可以向前声明。
b.协议声明 可以移到分类(class-continuation)中去
2.多用字面量语法
a.数值
NSInteger i = 5;
NSNumber * number = @(i);
NSLog(@"number = %ld",(long)[number integerValue]);
b.数组
NSArray * array = @[@"dog",@"cat",@"mouse"];
NSString * dog = array[0];
注意: 元素若有nil,会抛异常。
c.字典
NSDictionary * dic = @{@"key":@"value",
@"key2":@"value2",
@"key3":@"value3"};
d.字符串
NSString *str = @"hello world";
e.可变数字和字典
mutableArray[1] = @"cat";
mutableDictionary[@"key"] = @"value";
数组 字典元素必须是oc对象。
字面量语法创建的对象必须属于Foundation框架,子类是不行的。
字面量语法创建的对象是不可变的,需要时可用mutablecopy复制一份。
3.多用类型常量,少用宏定义
宏定义常量 不包含类型信息,可被重新定义且不会产生警告。
a.编译单元内可见 的常量
static const CGFloat kCellheight = 44.0f;
b.全局常量
xx.h
extern const NSInteger className_cellTag;
xx.m
const NSInteger className_cellTag = 999;
会出现再全局符号表中,名称加类名以便区分。
4.枚举类型
a.用NS_ENUM 与 NS_OPTIONS 来定义枚举类型,可以指定底层数据类型。
typedef NS_ENUM(NSInteger,AnimationState)
{
xxx1,
xxx2,
xxx3
};
typedef NS_OPTIONS(NSInteger,AnimationState)
{
xxxxx1 = 1 << 0,
xxxxx2 = 1 << 1,
xxxxx3 = 1 << 2,
};
b.处理枚举类型的switch语句不要实现default分支,有利于处理新增枚举。