2009-05-09 3 views
59

구현 전과 구현 후에 [super viewDidLoad]라는 예제 코드를 볼 수 있습니다.`[super viewDidLoad]`컨벤션

나는 당신이 super (다른 많은 토론에서 볼 수 있듯이)를 항상 호출 할 필요는 없다는 것을 알고있다. 코드를 호출하기 전에 코드를 작성하기 전후에 필요합니까?

이것은 슈퍼의 구현에 따라 영향을 줄 수 있습니다. 비록 당신이 당신의 글쓰기를 위해서 슈퍼의 구현을 알 필요는 없지만. 물론

어떤 생각 (... 등 willAppear, didAppear) UIViewControllers 위임 모든 방법에 간다?

+0

관련 : http://stackoverflow.com/questions/824695/do-i-always-have-to-call-super-viewdidload-in-the-viewdidload-method – cregox

답변

91

나의 경험 법칙은 : 초기화와 관련된 일을하는 경우, 항상 수퍼 클래스의 메소드를 호출해야합니다 (호출하려고하는 경우). 이것은 수퍼 클래스에게 당신이 나중에 당신의 방법에 의존하고있는 어떤 셋업을 할 기회를줍니다. 파기와 관련이 있다면 슈퍼 클래스의 메서드를 마지막으로 호출하십시오. 이렇게하면 메서드를 실행하는 동안 개체의 상태를 신뢰할 수 있습니다. 마지막으로 케이스별로 사례를 선택하십시오. 예를 들어, 이벤트를 처리하는 경우 이벤트를 먼저 처리하고 이벤트를 처리하지 않기로 선택한 경우 또는 어떻게 든 변경 한 후 이벤트를 따라 전달하려는 경우에만 수퍼 클래스의 메서드를 호출 할 수 있습니다 체인.

+7

Jason의 조언과 종종 Apple 문서 중요 할 때 subclasser 책임. 예 : 중요한 행동이 수퍼 콜에 달려있을 때, 종종 문서에서 강조 표시됩니다. 일반적으로 당신에게 상처를주지 않으려면 수퍼로 전화하여 안전을 유지하십시오. – danielpunkass

+0

고마워, 그건 꽤 논리적이고 내가 취하고있는 접근 방식이야. 내 수업을 서브 클래 싱 중이었고 무엇을 해야할지 선택할 수있었습니다. viewDidLoad 전후에 설정을 요구함으로써 컨벤션을 위반하고 싶지 않았습니다. –

+3

물론 de-allocate되기 전에 수퍼 클래스에 속한 것을 사용해야 할 수도 있기 때문에 -dealloc에서 반대가됩니다. – mk12

0

부모님과 자녀가 2 개의 클래스로 구성되어 있다고합시다. 자녀는 부모로부터 상속받습니다. 문자열을 반환하는 greet이라는 메서드가 있습니다. 여기

부모 방법은 모습입니다 :

코드 :

-(NSString *)greet { 
return @"Hello"; 
} 

우리는 자녀가 부모로부터 배우고 싶다. 그래서 우리는 엄마가 어떻게 인사할지에 관해 인사하기 위해 슈퍼를 사용합니다. 그러나 우리 자신의 작은 추가도 있습니다.

코드 : //는 "안녕하세요"하고 아이가 인사 "안녕, 엄마"를 맞이 이제 부모

-(NSString *)greet { 
NSString *parentGreeting = [super greet]; 
return [parentGreeting stringByAppendingString:@", Mommy"] 
} 

부모

로부터 상속. 나중에 부모님의 인사말을 "안녕"으로 바꾸면 두 수업 모두 영향을 받게되고 "안녕"과 "안녕, 엄마"가 생깁니다.

super는 수퍼 클래스가 정의한대로 메소드를 호출하는 데 사용됩니다. 서브 클래스에 의해 재정의 된 메소드에 액세스하여 클래스가 상위 클래스가 구현하는 메소드 주위에 자체 코드를 래핑 할 수 있도록하는 데 사용됩니다. 어떤 종류의 상속이라도하는 경우 매우 편리합니다.