2012-09-14 4 views
5

NSObject를 서브 클래 싱하는 동안 self = [super init];을 사용자 지정 초기화 메서드로 작성하는 것이 합리적입니까? 다른 클래스를 서브 클래 싱 할 때 필요하다고 알고 있는데, 사용자 정의 초기화가있을 수 있기 때문에 NSObject init 메소드는 아무 것도하지 않습니까?NSObject init 메서드는 어떤 작업을 수행합니까?

+4

들어가는 것이 좋은 습관입니다. – Kyle

답변

9

개체를 초기화 할 때까지 사용할 준비가되지 않았습니다. NSObject 클래스에 정의 된 init 메서드는 초기화를 수행하지 않습니다. 그것은 단순히 자기를 돌려 보낸다.

기본적으로 NSObject 하위 클래스에서 [super init]을 반드시 호출 할 필요는 없지만 여전히 권할 만합니다. 그것은 단순히 더 나은 디자인입니다. 수퍼 클래스를 변경하면 여전히 작동합니다.

출처 : NSObject Class Reference.

+5

+1 "나는 여전히 추천한다."- NSObject 구현이 변경 될 수 있고, 클래스의 수퍼 클래스를 변경할 수 있습니다. 수퍼 클래스의 동작에 대해 물건을 추론하는 것은 클래스의 일이 아닙니다. – Tim

+0

감사합니다. :) –

+4

아니요, 정말로, 당신의 코드는 ** 틀린 **입니다. 만약 당신이'self = [super init ...];'하지 않는다면. NSObject의 구현이 무엇을하든 상관 없습니다. 취약성을 최소화하기 위해 그리고 문서화 된 올바른 패턴을 따르는 것이 유지 보수가 용이 한 앱으로 이어지기 때문에 어디에서나 패턴을 일관되게 사용하십시오. – bbum

관련 문제