一、向容器加對象
數組
主要指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;