2011-07-04 5 views
3
Objective-C Objective-C에 대한 책을 읽으면서 다음과 같이 클래스를 초기화 한 예제를 보았습니다.

항상 필수 또는 때로는 선택 사항입니까?

ClassName *p = [[ClassName alloc] init]; 

처음에는 ClassName가 초기화되기 전에 데이터를 저장하기 위해 메모리를 할당해야한다는 것이 이해되는 반면, 다음과 같이 잘 작동합니다 :

ClassName *p = [ClassName alloc]; 

init은 항상 필요합니까?

+0

흥미롭게도'init'을 사용하지 않는 것이 유용 할 수 있습니까? – FeifanZ

답변

3

, 그것은 기술적으로 필요하지 않은 것. NSObjectinit 방법이 실제로 단지 return self;이기 때문입니다. 그러나 실제로는 이 절대적으로입니다. 객체는 내부 상태를 만들고, 비공개 멤버를 할당하고, 일반적으로 작업 준비를 위해 init 메서드 내부에서 내부 설정을 수행합니다. init 메서드는 할당 한 것과 동일한 개체를 반환하지 않을 수도 있습니다.

두 단계로 생각하십시오. alloc은 메모리를 할당하지만 그게 전부입니다 - Java의 new과 유사합니다. init은 객체가 작업을 수행 할 수 있도록 메모리의 상태를 구성합니다. 이는 Java가 생성자를 호출하는 것과 유사합니다. 그것을 버리지 마라!

+0

차가움. 이것을 – JAM

+1

설명해 주셔서 감사합니다.'alloc'도'isa' 포인터를 설정하는 중요한 단계를 수행합니다. –

3

좋은 질문입니다. 그리고 네 말이 맞아. 엄밀히 말하면 "초기화"는 필요하지 않습니다. "ALLOC는"객체 생성 할 세 가지 중요한 일을한다 : - 모든 인스턴스 변수를 유지하기에 충분한 메모리를 할당 - 초기화를 "ISA"예를 변수 - 다른 모든 인스턴스는 "뿌리는 것을 고려

0으로 설정된다 "코코아 객체 인 NSObject는 init 메서드에서"self "를 반환합니다.

그러나 Obj-C 시민이되고 싶다면 "init"을 사용해야합니다. 그것은 당신, 개발자 및 환경 사이의 "계약"의 일부입니다.

관련 문제