아이폰 OS -NSAssert를 사용하여 개발 주장 ()

어설 (주장), 개발하는 동안 사용을 의미하므로 그 자체 테스트 프로그램 코드를 런타임 (일반적으로 서브 루틴 또는 매크로). 어설는 그 정상 작동 절차를 나타내고, 사실과 주장은 코드에서 예기치 않은 오류를 발견 한 것을 의미 false입니다. 어설 높은 신뢰성 요구 사항에 대한 대규모의 복잡한 프로그램이나 프로그램에 특히 유용합니다.

주장에 대한 자세한 내용은, 우리는 "코드 전체 2"의 "방어 프로그래밍"장을 참조하는 것이 좋습니다해야합니다. 이하, 고전 코드 주장의 사용에 관한 전체지도와 조언의 일부에서 발췌 :

 

  1. 오류 처리 상황을 처리하는 코드가 발생해서는 안 상황을 처리 할 수있는 주장으로 발생 할 것으로 예상된다으로.

  2. 풋 주장에 코드 요구 사항의 실행을 방지하려면

  3. 그리고 이전과 조건 후 상태를 확인하기 위해 주장 주석

  4. 코드의 높은 견고성를 들어, 오류를 재 처리 주장을 사용해야합니다

내부 시스템에서 신뢰성있는 데이터는 외부의 신뢰할 수없는 주장에 데이터가 외부 신뢰할 수없는 데이터에 대한 오류 처리 코드를 사용해야하기보다는, 주장을 사용할 수 있습니다. 어설 실행 주석으로 볼 수있다.

외부 시스템 데이터 (사용자 입력, 파일, 네트워크가 판독 등)가 신뢰할 수없는 엄격한 검사에 대한 필요성이 (일반적으로 오류 처리) 가드 동등 시스템 내부로 방출 될 수있다. (예를 들면 서브 루틴 호출과 같은) 시스템 내에서의 상호 작용에 관해서는, 또한 모든 데이터 입력은,이 시스템과 동일한 경우를 처리해야하는 신뢰할 테두리 아니며, 코드가 부풀어 복잡하게한다; 실제로, 시스템 서브 루틴에 전달 내부가, 적절한 데이터는 발신자 부담해야 원하는, 시스템 내에서 호출자가 데이터를 서브 루틴에 전달되도록해야 할 것은 그 작품을 제대로 적합합니다. 따라서, 분리 신뢰할 수없는 외부 환경과 내부 환경 신뢰할 수있는 시스템으로, 복잡성을 줄일 수 있습니다.

그러나, 개발 단계, 코드는 아마도 외부 데이터는 아마 실패 서브 루틴 호출의 결과로, 서브 루틴 호출 시스템 코드 내부 오류가 종합 충분히 고려 처리, 결함을 포함 할 가능성이있다. 이번에는 주장이 역할을 할 수있다, 서브 루틴 호출의 출현을 주도 문제의 일부에 장애가 결국 확인합니다. 차별화 된 신용 시스템의 모든 결함을 청소 한 후 설정됩니다. 릴리스 때까지 기다리십시오, 이러한 주장이 존재 할 필요 없어야합니다.

아이폰 OS 개발에서는 프로그램 처리 () 주장 매크로 NSAssert를 사용할 수 있습니다. NSAssert는 ()는 개발자가 최대한 빨리 버그를 찾는 데 도움이 될 수 있습니다, 올바르게 사용. 디버그 버전과 릴리스 버전 : 대부분의 프로젝트는 두 가지 버전으로 사용할 수 있기 때문에 개발자는 주장 확인중인 응용 프로그램의 각 버전에 필요하지 않습니다. 디버그 버전에서 개발자는 모든 주장이 선택되었는지 바라며, 릴리스 버전 종종 주장 검사를 설정합니다. 설정 릴리스 버전 비활성화 주장은 다음과 같습니다 :

빌드 설정 메뉴에서 전 처리기 매크로 항목을 찾을 수 있습니다, 전 처리기 매크로 다음 항목 구성을 생성하는 프로그램, 선택의 여지가 : 디버그 버전과 릴리스 버전. 자료 입력, 설정 NS_BLOCK_ASSERTIONS하지 주장 검사를 선택합니다. 도에 도시 된 바와 같이.

여기, 우리가 이름 입력에있는 절차에 주장을 추가, 이름의 내부 기능을 인쇄 예외가 발생, 비어 있습니다.

 

 
  1. - (void)printMyName:(NSString *)myName

  2. {

  3. NSAssert(myName != nil, @"名字不能为空!");

  4. NSLog(@"My name is %@.",myName);

  5. }


함수 (MyName로)로 전달 된 파라미터는 비어있을 때, 어서 프로그램 충돌이 실행되어야하고, 주장 기술 정보 출력합니다. 이 실시 예에서, 로그 아웃 콘솔 인쇄는 다음과 같습니다 :

 

 

NSAssert [1268 : A0B] ***에서 어설 션 실패 - [의 ViewController printMyName :]  

NSAssert / NSAssert / ViewController.m : 38

2013년 11월 21일 13 : 56 : 01.927 NSAssert [ 1268 : A0B] *** 캐치되지 않는 예외 'NSInternalInconsistencyException', 이유 때문에 종단 응용 프로그램 : ' 이름을 비워 둘 수 없습니다! '

어설 션이이 오류 어디서 오류가 발생의 원인을 확인하기 쉽습니다하여 입력 매개 변수가 null이 될 수 없음을 우리에게 알려줍니다.

우리가 null 이외의 매개 변수를 전달하면, 프로그램은 올바른 들어오는 이름을 인쇄합니다 :

내 이름은 UnivCore입니다.

아래, 우리는 프로그램이 전달 된 매개 변수가 비어있는 경우에도, 주장이 실행되지 않습니다, 이전 세트를 기반으로, 릴리스 버전으로 설정되어 테스트합니다. 방법의 릴리스 버전에 다음과 설정 :

제품 -이> Scheme-> 편집 계획은 ... (직접 바로 가기 키 + 시프트 +를 명령 할 수있다)을 클릭, 실행 키를 선택하고 정보 패널의 빌드 릴리스의 구성을 수정, 현재의 세대 변화에 배열 될 수있다 릴리스합니다. 그런 다음, 빌드 및 프로그램을 실행, 그것은 프로그램의 릴리스 버전을 생성합니다. 보관 항목에 대한 기본 빌드 구성을 릴리스합니다.

이 시점에서, 우리는 프로그램을 실행, 프로그램은 다음과 같은 성명을 인쇄합니다 :

내 이름은 (NULL)입니다.

이 쇼는 주장 코드가 실행되고 있지 않습니다.

 

저작권 : https://blog.csdn.net/sharkleegroup/article/details/16859263에서 재판

게시 83 개 원래 기사 · 원의 찬양 (12) · 전망 180 000 +

추천

출처blog.csdn.net/shengdaVolleyball/article/details/83898225