2011-07-29 5 views
18

@class 방법을 사용 나는 최근에 몇 가지 예를 본 적이iOS 4 개발에서 @class는 무엇을합니까?

#import "MyViewController.h" 

appdelegate.h에 .H의 정상적인 수입

@class MyViewController; 

을하는 것이 아니라 일을 어떤 차이가 있습니까 어떤 차이가 있는지 궁금해했다.

감사합니다.

+0

아마도 이와 비슷한 질문이 도움이 될 수 있습니다. [http://stackoverflow.com/questions/322597/class-vs-import](http://stackoverflow.com/questions/322597/class-vs-import) –

답변

21

큰 차이가 있습니다.

@class MyViewController; 

오브젝트의 전방 선언은 MyViewController입니다. 컴파일러에게 객체 유형을 알려주고 헤더 파일을 포함 할 필요가없는 경우에만 사용됩니다.

이 타입의 객체를 생성하고 메소드를 호출 할 필요가 있지만, 당신이 필요한 경우 :

#import "MyViewController.h" 

그러나 일반적으로 이것은 .m 파일에 이루어집니다.

전달 선언을 추가로 사용하면이 헤더 파일을 사용하는 객체와 동일한 헤더 파일에 @protocol을 정의 할 수 있습니다. 컴파일러는 MyObject 객체를 컴파일하기 전에 @protocol MyProtocolDelegate가 유효한지 알 필요가 위의 예에서

@protocol MyProtocolDelegate; //forward declaration 

@interface MyObject { 
    id<MyProtocolDelegate> delegate; 
    ... 
} 
... 
@end 

@protocol MyProtocolDelegate 
    ... //protocol definition 
@end 

.

단순히 프로토콜 정의를 MyObject 정의 위로 이동하면 정의가 작동합니다.

6

@class을 사용하면 클래스를 정의하는 헤더 파일을 #import 할 필요없이 심볼이 Objective-c 클래스 이름임을 선언 할 수 있습니다.

클래스의 메서드 매개 변수 나 클래스에 대한 포인터를 선언하기 위해 정의 된 클래스 이름 만 필요하고 여기에있는 메서드, 필드 또는 속성에 액세스 할 필요가없는 경우이 메서드를 사용합니다. 수업.

컴파일 시간과 #import의 양을 절약 할 수 있으며 때로는 지저분한 포함 순환 문제를 방지하는 데 도움이됩니다.

[rjstelling가 지적한대로 선언을 인터리브하고 당신이 뭔가를 "앞으로 선언"을 필요로하는 곳에 그리고는 때때로 유용합니다.]

+0

위대한, 설명 주셔서 감사합니다. – user868830

관련 문제