일반적으로 UI
클래스에서 서브 클래스를 만들 때 관심있는 수퍼 클래스 초기화기를 호출합니다. 그러나 구현 세부 사항은 NSObject
에 대해 잘 모르겠습니다. 멤버 바의 관점에서 볼 때별로 그렇지 않은 것 같습니다. 내 하위 클래스가 NSObject
인 경우 [super init]
으로 전화해야합니까?NSObject에 대해 [super init] 또는 [super initWithCoder] 등을 호출해야합니까?
8
A
답변
8
기술적으로 아니오. documentation for -[NSObject init]
는
NSObject
클래스에 정의 된init
방법이 더 초기화를하지 않습니다 말한다; 단순히self
을 반환합니다.
이를 문서화하고 그것에 의존하는 코드의 무리는 사실 매우 맥 OS X의 향후 버전에서 변경 가능성이
편집이라고, 이미 거기에 아마 때문에 :BoltClock's a Unicorn가 제공 최대 쌍곡선을 만들고 싶습니다. 프로그램을 실행하는 모든 사용자에게 -[NSObject init]
을 호출하지 않아도 저장된 총 시간은 클래스의 수퍼 클래스를 무언가로 변경 한 경우 발생하는 디버깅 시간을 초과 할 가능성은 거의 없습니다. NSObject
이외의 전화 번호는에 추가해야합니다.. documentation에서
4
, 전혀 초기화를 할 나타나지 않습니다
NSObject의 클래스에 정의 된
init
메서드는 초기화를하지 않는다; 단순히self
을 반환합니다. 당신은 어쨌든 하위 클래스에서 호출 알고,
가 나는 [super init]
를 호출하지 해가 될 생각하지만 규칙을 따라야하지 않을 이유가 없습니다합니다. 예를 들어, 하위 클래스가 나중에 다른 클래스에서 상속하는 결과를 초래할 수 있습니다.이 경우 하위 클래스에서 필요로하는 초기화 로직이 자체 -init
메서드에 포함될 수 있습니다.
0
명확하고 정확한 것을 수행해야하기 때문에 구현시 super
중 하나를 호출하면됩니다.