NSParameterAssert 란 무엇입니까?


답변:


115

메소드의 매개 변수가 nil0 이 아닌지 테스트하는 간단한 방법입니다. 따라서 기본적으로이를 사용하여 일부 매개 변수를 설정해야한다는 전제 조건을 생성합니다. 설정되지 않은 경우 매크로는 응용 프로그램을 중단하고 해당 줄에 오류를 생성합니다. 그래서:

- (void)someMethod:(id)someObjectThatMustNotBeNil
{
  // Make sure that someObjectThatMustNotBeNil is really not nil
  NSParameterAssert( someObjectThatMustNotBeNil );
  // Okay, now do things
}

전제 조건은 프로그래머가 메서드 / API를 올바르게 호출하는지 확인하는 간단한 방법입니다. 프로그래머가 전제 조건을 위반하면 응용 프로그램이 조기에 종료됩니다. 디버깅 및 기본 테스트 중입니다.

NSParameterAssert 모든 표현식이 참인지 테스트하는 데 사용할 수 있으므로 다음과 같이 사용할 수도 있습니다.

NSParameterAssert( index >= 0 ); // ensure no negative index is supplied

NSParameterAssert () 매크로에 대한 Apple의 문서


1
코드에서 예외를 포착해야합니다. 그렇지 않으면 Assert가 참이면 앱이 중단됩니다.
루시우스

14
@lucius : 어설 션은 분산 응용 프로그램에서 조건을 확인하는 데 사용되지 않으며 개발 중에 오류를 포착하기 위해 존재합니다. 조용히 실패하지 않고 불량 상태 (예 : Nib에 연결되지 않은 콘센트)에서 무언가가 충돌하도록하면 문제를 조기에 발견 할 수 있습니다. 많은 사람들이 배포시 매크로 또는 #ifdef를 통해이를 비활성화합니다.
Brad Larson

5
@lucius-목표는 전제 조건이 충족되지 않을 때 응용 프로그램을 중단하는 것입니다. 이를 통해 프로그래머는 자신이 잘못한 것을 즉시 알 수 있습니다. Cocoa의 assertion이 평가되지 않도록하려면 NS_BLOCK_ASSERTIONS 매크로를 정의 할 수 있습니다. 이것은 그것들을 비활성화하지만, 아이디어는 충돌로부터 보호하기보다는 부작용이나 느린 코드가 실행되는 것을 막는 것입니다. 생산에 의해, 어설 션은 올바르게 사용된다면 절대 트리거되지 않아야합니다.
제이슨 코코

1
프로덕션 빌드를 수행 할 때 간단한 방법으로 이러한 어설 션을 제거 할 수 있습니까? IMHO는 프로그래밍 오류를 잡기 위해 개발 중에 가장 잘 사용됩니다 (위의 주석에서 언급했듯이).
Johan Karlsson

5
@JohanKarlsson 그것은 가능하며 구성에서 현재 버전의 템플릿에서 기본적으로 설정됩니다 (이것은 꽤 멀리 돌아갑니다) Release. ENABLE_NS_ASSERTIONS최신 버전의 Xcode에서 빌드 설정을 설정하거나 NS_BLOCK_ASSERTIONS매크로 를 정의하고 1 로 설정하여이를 제어 할 수 있습니다 . Xcode 5에는 빌드 설정을 설정하고 기본값을 Yesin DebugNoin으로 설정하는 프로젝트 설정 * Enable Foundation Assertions Release구성.
Jason Coco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.