2011-10-06 2 views
6

난 샘플 코드 ListAdder을 읽고 많은 존재하고, 예를 들면 오른쪽으로 가변 후 주장, 또는 거의 모든 방법에 사용될 :왜 프로젝트에서 '단언'을 사용합니까? (그리고 그렇게 많은 시간을 사용하는 이유)

self.formatter = [[[NSNumberFormatter alloc] init] autorelease]; assert(self.formatter != nil);

또는 :

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    #pragma unused(tv) 
    #pragma unused(indexPath) 
    UITableViewCell * cell; 

    assert(tv == self.tableView); 
    assert(indexPath != NULL); 
    assert(indexPath.section < kListAdderSectionIndexCount); 
    assert(indexPath.row < ((indexPath.section == kListAdderSectionIndexNumbers) ? [self.numbers count] : 1)); 

궁금한 점은 무엇입니까?

감사

답변

5

Design by Contract 또는 DbC의 구현입니다.

목표 C는 DbC의 사전 조건, 사후 조건 및 불변량에 대한 기본 지원이 없지만 특히 사후 조건과 전제 조건은 매크로로 구현할 수 있습니다. 여기

은 목표 C에서 DbC을 구현하기위한 다른 방법은 다음과 같습니다

2

주장의 요점은 나중에 대신 미묘한 부정 행위의 버그가 즉시 표시해야하고, 쉽게 진단 가능한 방법으로 확인하는 것입니다. 이 경우 해당 코드의 개발자는 코드가 실행 된 후 4 가지 조건이 유지되도록 보장하려고합니다.

2

어설 션은 코드를 호출하는 방법에 대한 프로그래머의 가정을 검사합니다. 가정이 잘못되면 어설 션이 실패하고 예외가 발생합니다. 이로 인해 가능한 한 빨리 코드가 실패합니다.

이 작업을 수행할지 여부는 논쟁의 여지가 있습니다. 너무 멀리 가져갈 수 있습니다.

+0

Objective C에 대해 모르지만 다른 언어로되어 있습니다. 컴파일 된 시간에 비활성화되어 라이브 시스템의 속도를 늦추지는 않지만 테스트 및 준비 중에는 버그 감지에 사용할 수 있습니다. – corsiKa

관련 문제