2012-06-25 4 views
-5

개체를 어떻게 할당합니까? 내가 B를 생각하고 또는 D 할 수있다개체를 할당하는 올바른 방법은 무엇입니까?

a. MyClass *obj = malloc(sizeof(MyClass)); 
b. MyClass *obj = [MyClass alloc]; 
c. MyClass *obj = alloc(MyClass); 
d. MyClass *obj = [MyClass new]; 
e. None of the above. 

는 답변. 어떻게 생각해?

+0

까다로운 문제는 무엇인가요? 나는 Objective-C 참고서에 문서화되지 않은 것을 말하고 있습니까? –

+1

어떤 사람들은 RTFM해야합니다. – futureelite7

답변

1
a. MyClass *obj = malloc(sizeof(MyClass)); 

이것은 잘못된 것입니다. objective-C 객체는 malloc이 만들 수없는 특정 구조를 가지고 있습니다. 이것은 유효한 objective-C 객체를 생성하지 않습니다.

b. MyClass *obj = [MyClass alloc]; 

개체를 할당하는 올바른 방법입니다. 그러나 모든 objective-c 객체는 사용되기 전에 어떤 종류의 -init 메시지를 전달해야합니다.

c. MyClass *obj = alloc(MyClass); 

번호

d. MyClass *obj = [MyClass new]; 

이것은 실제로 [INIT] ALLOC [MyClass에]와 동일하다. 그러나 사용자가 새 객체를 할당 할 때 사용할 초기화 프로그램을 선택할 수 없으므로 대부분의 책은 대신 alloc/init 메소드를 사용하여 새 객체를 만드는 것이 좋습니다.

1

응답 E 거의 [MyClass alloc] 또는 [MyClass new],하지만 종종 [[MyClass alloc] init] 사용하지 않습니다. Chuck에 의해

인용구 : 오브젝티브 C에서 원래

는 개체가 새로 만들어졌다. OpenStep/Cocoa 프레임 워크가 진화하면서 디자이너는 객체에 메모리를 할당하고 그 속성을 초기화하는 것은 별개의 문제 였으므로 별도의 메소드 (예 : 객체가 특정 메모리 영역에 할당 될 수 있음)를 가져야한다는 의견을 제시했습니다. 그래서 객체 생성의 alloc-init 스타일이 유리하게되었습니다. 기본적으로 새로운 클래스는 거의 사용되지 않지만 거의 사용되지 않으므로 코코아 클래스에는 많은 init 메소드가 있지만 사용자 정의 새 메소드는 거의 없다는 것을 알 수 있습니다.

+0

'[[MyClass new]'는'[[MyClass alloc] init '을 호출하는 것과 본질적으로 동일하다.] – JustSid

+0

실제로 [[NSMutableArray alloc] init]'과'[NSMutableArray new]'는 정확히 똑같다. 그러나 클래스는'[[MyClass alloc] init]을 사용하여'new' 구현을 오버라이드 할 수 있습니다. 객체가 예상대로 할당되고 초기화됩니다 (항상 예외가 있습니다). – Anne

+0

클래스는'alloc'을 오버라이드 할 수 있으며,'alloc'을 오버라이드하는 클래스의 양은 아마도'new'를 오버라이드하는 클래스와 같습니다. – JustSid

관련 문제