iOS 네트워크 데이터 처리 기술, 프로그램의 건장 성 향상
머리말
모 바 일 개발 자로 서 네트워크 데이터 와 접촉 하 는 것 을 피 할 수 없다.수요 개발 과정 에서 우 리 는 인터페이스 문 서 를 통 해 전후 단 상호작용 의 데이터 구 조 를 약정 할 것 이다. 이 를 바탕 으로 우 리 는 전단 의 데이터 상호작용 을 순조롭게 실현 하고 데 이 터 를 백 스테이지 로 순조롭게 보 낼 수 있다.만약 우리 가 쌍방의 약속 을 엄 격 히 준수 한다 면 데이터 문 제 를 크게 줄 일 수 있 을 것 이다.그러나 데이터 라 는 것 은 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~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.