@class 방법을 사용 나는 최근에 몇 가지 예를 본 적이iOS 4 개발에서 @class는 무엇을합니까?
#import "MyViewController.h"
appdelegate.h에 .H의 정상적인 수입
@class MyViewController;
을하는 것이 아니라 일을 어떤 차이가 있습니까 어떤 차이가 있는지 궁금해했다.
감사합니다.
@class 방법을 사용 나는 최근에 몇 가지 예를 본 적이iOS 4 개발에서 @class는 무엇을합니까?
#import "MyViewController.h"
appdelegate.h에 .H의 정상적인 수입
@class MyViewController;
을하는 것이 아니라 일을 어떤 차이가 있습니까 어떤 차이가 있는지 궁금해했다.
감사합니다.
큰 차이가 있습니다.
@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
정의 위로 이동하면 정의가 작동합니다.
@class
을 사용하면 클래스를 정의하는 헤더 파일을 #import 할 필요없이 심볼이 Objective-c 클래스 이름임을 선언 할 수 있습니다.
클래스의 메서드 매개 변수 나 클래스에 대한 포인터를 선언하기 위해 정의 된 클래스 이름 만 필요하고 여기에있는 메서드, 필드 또는 속성에 액세스 할 필요가없는 경우이 메서드를 사용합니다. 수업.
컴파일 시간과 #import의 양을 절약 할 수 있으며 때로는 지저분한 포함 순환 문제를 방지하는 데 도움이됩니다.
[rjstelling가 지적한대로 선언을 인터리브하고 당신이 뭔가를 "앞으로 선언"을 필요로하는 곳에 그리고는 때때로 유용합니다.]
위대한, 설명 주셔서 감사합니다. – user868830
아마도 이와 비슷한 질문이 도움이 될 수 있습니다. [http://stackoverflow.com/questions/322597/class-vs-import](http://stackoverflow.com/questions/322597/class-vs-import) –