OC語言的代碼保護

一、向容器加對象
數組

      主要指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;
相關文章
相關標籤/搜索