一、向容器加对象
数组
主要指NSMutableArray、NSMutabledictionary。向这两个容器添加nil,会引发崩溃。因此在传入前,须要对传入的内容进行非错判断。atom
//错误示范 NSString *addString = nil; NSMutableArray *mArray = [NSMutableArray array]; [mArray addObject:addString]; //建议写法 NSString *addString = nil; NSMutableArray *mArray = [NSMutableArray array]; if (addString != nil) { [mArray addObject:addString]; }else { NSLog(@"xx类xx方法试图向数组mArray传入一个nil"); }
二、从容器取数据spa
主要指NSArray、NSMutableArray。从array里取数据,要注意防止下标数组越界。code
//错误示范 NSArray *array = @[@"a", @"b", @"c"]; int index = 5 NSString *testString = array[index]; //建议写法 NSArray *array = @[@"a", @"b", @"c"]; int index = 5 if (index < array.count) { NSString *testString = array[index]; }else { NSLog(@"xx类xx方法试图从数组mArray取一个超出count的对象"); } //通常要读取某个动态生成的容器里的内容,须要先对这个容器进行检查 NSArray *array = 动态生成; if (array != nil && array.count > 0) { //读取里面的内容 }else { //输出错误信息 }
三、调用其余类的方法或不知道要调用的方法当前SDK版本是否支持。须要先判断一下这个方法是否存在。
对象
//错误示范 [self.delegate 要调用的方法]; //建议写法 if ([self.delegate respondsToSelector:@selector(要调用的方法)]) { [self.delegate 要调用的方法]; }
四、定义delegate属性的时候,必定要设置为weak。
io
//错误示范 @property (nonatomic, assign) id <MyDelegate> delegate; //建议写法 @property (nonatomic, weak) id <MyDelegate> delegate;