2012-01-04 2 views
1

init 메소드가 초기화를 수행하기 전에 객체가 슈퍼 클래스에 의해 적절히 초기화되도록하기 위해 초기화 패턴의 목적은 무엇입니까?obj-c에서 init 패턴의 용도와 그 용도

왜 이것이 필요합니까?

우리는 다른 사람이 대신 슈퍼 클래스 initialiser의 전용 initialiser 전화 갈까요 왜 하나 개 이상의 초기화 메소드가있는 클래스가?

내가 자바 배경에서 온다. 그래서 이것을 완전히 이해하지 못한다. - 가장 가까운 것은 자바에서 일치 할 수 있지만 싱글 톤 패턴이지만 다른 사람들은 전용 초기화자를 호출하면 자바에서와 같이 나에게 감각을주지 않는다. 오히려 당신은 "해야"합니다.

그 초기화 호출을받는 super 클래스는 해당 클래스의, 반드시 인스턴스를 모든 종류의 객체를 반환 할 수 있기 때문에 하나는, 들으

답변

2
  1. 이니셜 라이저 패턴이 필요합니다 .... 자세히 설명 할 수 . 그것은 예를 들어, NSString이 작동하는 방식입니다. 실제로 다른 사용 패턴에 맞게 최적화 된 여러 종류의 문자열을 구현하는 클래스 클러스터입니다. 따라서 을 NSString 자손으로 호출하면 self가 만들어집니다 (예 : NSCFString). 클래스가 지정으로 그 중 하나가 선택되고, 많은 초기화를 가지고 있으며, 다른 모든이 아니라 슈퍼를 호출하여 구현해야하는 경우

  2. 는 목적 C.에 지정된 초기화라는 패턴이있다. 이것은 하위 클래스의 initializer를 올바르게 재정의하는 데 중요합니다. 지정된 클래스 만 초기화해야하며 모든 상황에서 호출해야합니다 (코드가 잘 작성되어 있고 지정된 initializer를 사용한다고 가정).

+0

그 정보에 대한 thx,이 내게 3 호기심을 던졌습니다 같아요 1) 거기에 방법에 대한 정적 최종 것과 같은 올바른 것을 의미합니까? 2) 모든 Nxxx 메서드는 자신의 기능을 구현하는 모든 하위 클래스에서 재정의 할 수 있습니까? 3) obj c는 C++와 같은 다중 상속을 허용합니까? 또는 그것의 단일 상속 같이 더 많은 것. – codejunkie

+0

@RedMan 1.'static final'이 오버라이드 할 수 없다는 것을 의미한다면 objective-c는 그것을 가지고 있지 않습니다. (그것은 Objective C의 개념으로 써드 - 파티 클래스의 모든 메소드를 오버라이드 할 수 있습니다.) 2. 예, 모든 메소드는 (클래스는 그 클래스를 오버라이드 (override) 할 수있는 경우) 및 카테고리 (카테고리는 단지 "패치", 추가 및 재 구현 클래스 메소드 세트)에서 상속됩니다. 3. 다중 상속은 없지만 프로토콜 (Java 인터페이스?)이 있습니다. 및 메시지 전달, 도움이 될 수 있습니다. – iHunter

+0

thx in java/obj c에 대한 정보 프로토콜이란 무엇입니까? 명시된대로 자바 인터페이스와 동일합니까? 및 메시지 전달? 나는 사과 dev에 의사가 객체 메시지 전달 같은 모든 것을 참조하십시오 같은 일의 비트 경우? 한 가지 bafels 날 많이 자바 에서이 가까운 비교는 무엇입니까? – codejunkie