iOS 네트워크 데이터 처리 기술, 프로그램의 건장 성 향상

3620 단어
  
         
      
        
      
             
            
  

머리말
모 바 일 개발 자로 서 네트워크 데이터 와 접촉 하 는 것 을 피 할 수 없다.수요 개발 과정 에서 우 리 는 인터페이스 문 서 를 통 해 전후 단 상호작용 의 데이터 구 조 를 약정 할 것 이다. 이 를 바탕 으로 우 리 는 전단 의 데이터 상호작용 을 순조롭게 실현 하고 데 이 터 를 백 스테이지 로 순조롭게 보 낼 수 있다.만약 우리 가 쌍방의 약속 을 엄 격 히 준수 한다 면 데이터 문 제 를 크게 줄 일 수 있 을 것 이다.그러나 데이터 라 는 것 은 100% 정확 하 다 고 보장 할 수 없다. 데이터 오류 로 인해 더 큰 프로그램 오류 가 발생 하지 않도록 우 리 는 데이터 에 대해 엄격 한 검 사 를 하여 프로그램의 건장 성 을 확보 해 야 한다.
/*
//      :
{
    "data":{
        "status":200,
        "result":{
            "list":Array[20],
            "all_page":20
        }
    },
    "status":0
}
*/

네트워크 데이터 건장 성 처리
층 층 이 판단 하 다
외부 에서 안 으로 층 층 이 판단 하여 모든 작업 이 성공 적 으로 이 루어 져 야 다음 작업 을 진행 할 수 있다.
+ (NSDictionary *)resultWithResponseDictionary:(NSDictionary*)responseDictionary
{
    NSAssert([responseDictionary isKindOfClass:[NSDictionary class]], @"responseDictionary should be dictionary class");
    
    if (![responseDictionary isKindOfClass:[NSDictionary class]]) return nil;
    
    NSDictionary *data = [responseDictionary valueForKey:@"data"];
    if (![data isKindOfClass:[NSDictionary class]])  return nil;
    
    NSDictionary *result = [data valueForKey:@"result"];
    if (![result isKindOfClass:[NSDictionary class]]) {
        return nil;
    }
    else
    {
        return result;
    }
}

+ (NSArray *)getListWithResponseDictionary:(NSDictionary*)responseDictionary
{
    NSDictionary *result = [self resultWithResponseDictionary:responseDictionary];
    
    NSArray *list  = [result valueForKey:@"list"];
    
    return [list isKindOfClass:[NSArray class]]?list:nil;
}

필드 형식 판단
OC 는 동적 언어 이기 때문에 대상 의 실제 유형 은 실행 할 때 확인 할 수 있 으 며, 유형 판단 을 추가 하지 않 으 면 네트워크 데이터 처리 장면 에서 대상 의 실제 유형 과 기대 유형 이 일치 하지 않 는 상황 이 발생 하여 방법 호출 이 실패 하고 프로그램 이 비정상적 으로 붕 괴 될 수 있 습 니 다.예 를 들 어 예상 되 는 것 은 NSString 대상 입 니 다. NSString 류 만 의 substring FromIndex 방법 을 호출 했 습 니 다. 실행 할 때 NSNumber 대상 이 고 substring FromIndex 방법 을 계속 호출 하면 실행 할 때 붕 괴 됩 니 다.또 다른 경우, 공통 부모 클래스 를 호출 하 는 방법 으로 NSNumber 대상 의 실행 방법 에 이상 이 발생 하지 않 지만, 이 때 프로그램 은 이미 위험 이 존재 합 니 다. 대상 유형 이 프로그램의 예상 에 부합 되 지 않 기 때 문 입 니 다.- (BOOL) isKindOfClass: (Class) aClass 를 통 해 유형 을 판단 할 수 있 습 니 다.
비공 식적 판단
빈 대상 호출 방법 은 이상 이 발생 하지 않 고 빈 대상 을 조작 하면 이상 이 발생 할 수 있 습 니 다. 예 를 들 어 배열 작업, 사전 작업 등 입 니 다.예:
//    
 NSMutableDictionary *dic = @{}.mutableCopy;
    [dic setObject:nil forKey:@"age"];

예외 가 없 는 'NSInvalidArgumentException' 으로 인해 앱 을 종료 한 이유: '* * - [ NSDictionaryM setObject: forKey:]: object cannot be nil (key: age)'
//    
  [@[].mutableCopy addObject:nil];

예외 가 없 는 'NSInvalidArgumentException' 으로 인해 앱 을 종료 한 이유: '* * * - [ NSArrayM insertObject: atIndex:]: object cannot be nil'
유사 한 문 제 를 피하 기 위해 서 는 조작 대상 전에 필요 한 비공 식 판단 을 추가 해 야 한다.
단일 필드 논리 적 합 법성 판단
일부 의미 있 는 필드 에 대해 이 필드 들 은 합 법 적 인 수치 구간 이 있 으 므 로 이 데 이 터 를 조작 할 때 먼저 데이터 가 합 법 적 인지 판단 해 야 한다. 예 를 들 어 연령 age, 합 법성 검사 age > 0 이다.
필드 간 논리 적 합 법성 판단
일부 필드 사이 에 논리 적 인 관계 가 존재 합 니 다. 특히 데 이 터 를 백 엔 드 에 제출 할 때 저 희 는 제출 하기 전에 데이터 간 의 논리 적 합 법성 검 사 를 해 야 합 니 다.예 를 들 어 x, y, z 필드 사이 에는 다음 과 같은 관계 가 있다. z = 2x + y.그러면 데 이 터 를 제출 하기 전에 논리 z = 2x + y 에 부합 되 는 지 판단 해 야 한다.
작은 매듭
1, 2, 3 시 는 네트워크 데이터 처리 에 매우 필요 한 반면 4, 5 시 는 데이터 논리 에 대한 검증 을 강화 하여 업무 에 더욱 가깝다.동시에 4, 5 시 는 일반적으로 단언 하 는 방식 으로 처리한다.개발 테스트 과정 에서 문제 가 있 으 면 단언 을 통 해 문 제 를 제때에 발견 할 수 있 기 를 기대한다.
end~

좋은 웹페이지 즐겨찾기