2011-03-22 7 views
1

나는 [super methodName]; 메서드의 첫 번째 줄과 마지막 줄로. 이 작업을 수행하는 가장 좋은 방법이 있습니까? 예를 들어[super methodName]의 위치;

: 일반적으로

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    self.intX = 1; 
} 

- (void)viewDidLoad { 

    self.intX = 1; 
    [super viewDidLoad]; 

} 

- (void)dealloc { 

    [myControl release]; 
    [super dealloc]; 
} 

답변

2

, 당신이 당신의 서브 클래스가 소요됩니다 변화에 계정에 관련하여 표준 동작을 할 전망 처리.

은 최고의
- (void)drawRect:(NSRect)dirtyRect 

효과적으로 당신이 RECT에보기를 그리는하지만, 뷰 자체뿐만 아니라 거기에 강조와 하위보기 관리의 모든을하고있다으로 설명된다.

그래서 수퍼 클래스 전후에 어떤 일을해야합니까? 정상적인 동작입니까?

이러한 경우 슈퍼 호출 전후에 코드를 이동하여 테스트하는 것이 가장 좋습니다. 또한 수퍼 전화를하지 않아서 행동에 어떤 영향을 미치는지 보지 않아서 행동에 대한 이해를 도출 할 수 있습니다.

viewDidLoad은 초기화 프로그램에 더 가깝고 일반적으로 실제 클래스 자체보다 서브 클래 싱 된 ivars와 더 관련이 있습니다. 그러나 서브 클래 싱 된 viewDidLoad이 ivars 또는 서브 클래 싱 된 뷰의 상태에 영향을 미치고 있다면; 당신은 아마도 슈퍼가 끝날 때까지 기다려서 변경 사항이 날아 가지 않도록하고 싶을 것입니다.

0

dealloc에서 우리는 마지막으로 [super methodName];을 호출합니다. 왜냐하면 수퍼 클래스를 릴리스하기 전에 하위 클래스 개체를 정리해야하기 때문입니다. 그렇지 않으면 고아가됩니다.

예 :

이 예제를 생각해보십시오. 너에게 이해가 되니?

좋은 교육을 받기 위해 아빠의 돈을 사용하면 수입을 올릴 수 있습니다 (자신의 하위 클래스를 만들기 전에 수퍼 클래스의 혜택을 받으십시오). 나쁜시기에, 먼저 돈을 잃어 버리고 천천히 아빠의 돈을 뺄 수도 있습니다 (dealloc 메소드에서는 서브 클래스의 객체를 해제 한 후 수퍼 클래스를 릴리스합니다).

관련 문제