2010-07-15 4 views
4

여러 사용자 지정 클래스가있는 프로젝트에서 작업하고 있습니다. 데이터를 저장할 정수 속성이있는 CardModel (NSObject)과 CardModels 묶음을 포함하고 CardView (UIView)의 배열을 가진 Deck (NSObject)은 CardModel을 내가 소유하는 속성으로 가질 때 Deck에서 CardModel을 선택합니다. 그리고 나서 나는 UINavigationController에서 돌아 다니는 UIViewControllers 묶음을 가지고 있습니다.@class 선언을 넣을시기와 위치

제 질문은 @class 컴파일러 지시문을 언제 어디에서 사용해야하는지에 관한 것입니다.

나는 새 파일을 만들고 그것을 서브 클래스에 의한 UIViewController, 나는 MyViewController.h 또는 .m의 헤더에 @class MyViewController를 사용해야하고 실제로 때 하나의 컨트롤러와 같은 컨트롤러를 (사용하는 파일의 헤더에 갈 않는 서브 클래스 경우 다른 컨트롤러 유형을 인스턴스화하고이를 스택으로 푸시). 아니면 전혀 사용해야합니까? 주식 구현에 포함 된 것 이외의 클래스에 실제로 새 속성을 추가하는 경우에만 필요합니까? 내가 자리에 @class을 끼고있는 것처럼 보입니다. 오류가 발생하지 않도록해야하지만, 필요할 때 나는 근본적으로 이해하지 못합니다.

감사합니다.

답변

8

사용자 지정 클래스에 .h를 포함하지 않고 사용자 지정 클래스에 대한 정보를 .h에 사용합니다.

예 : 두 사용자 정의 클래스 : 자동차 및 휠

Car.h 
---------------- 
@interface Car : NSObject { 
} 
- (void)addWheel:(Wheel*)newWheel; 
@end 
당신이 그렇게 같은 Wheel.h을 가져올 수 있도록 오류를 슬로우 있도록 Car.h 클래스 '휠'에 대해 알고하지 않습니다

:

Car.h 
---------------- 
#import "Wheel.h" 

@interface Car : NSObject { 
} 
- (void)addWheel:(Wheel*)newWheel; 
@end 

그러나이 작업을 수행 할 필요가 없습니다. Car.h는 Wheel 클래스에 대해 아무 것도 알 필요가 없으며 단지 존재 하는지를 알아야합니다. 그래서 당신이 사용하는 것은 단지 "이 클래스가 존재합니다."라고 말하는 @ 클래스가 있습니다.

Car.h 
---------------- 
@class Wheel; 

@interface Car : NSObject { 
} 
- (void)addWheel:(Wheel*)newWheel; 
@end 

그런 다음 Car.m, 실제로 휠 클래스에 대해 알아야 할 (속성, 메서드 등)의 내부에 당신은 거기 Wheel.h을 가져와야합니다.

+0

감사합니다. 꽤 명확 해 보입니다. 헤더의 @class는 해당 클래스를 참조하는 헤더가 ok임을 나타냅니다. 그런 다음 해당 .m 파일의 .h 파일의 #import가 클래스의 실제 속성 및 메서드에 대한 구현 액세스 권한을 제공합니다. 그러나 이것은 NSObject 또는 모든 수퍼 클래스에서 서브 클래 싱되는 것에 대해서만 사실입니까? "새 파일"을 만들고 하위 클래스를 선택할 때마다 필자는이 작업을 수행해야하며 정규 코드 인 클래스에서 클래스를 인스턴스화 할 때마다 필자는 그렇지 않습니다. ? – Steve

+0

모든 수퍼 클래스도 마찬가지입니다. '@class X'는 단순히 "포인터가있을 수있는 클래스 X가 있습니다"라는 약어입니다. 아무것도 더, 아무것도 덜. 클래스의 헤더를 먼저 가져올 수없는 경우에만 필요합니다 (일반적으로 PCH 파일에 있음). – bbum

+0

그래서 여러개의 헤더에 동일한'@class x' 지시어를 사용할 수 있습니다. 단, 헤더가 속성이나 구현하는 메소드에서'x'에 대해 알아야하는 것이 맞습니까? 내 마음 속에 고착하기 시작 - 감사합니다! – Steve

4

@class 지시어는 클래스에 대해 알기 위해 머리글이 필요하지만 클래스의 헤더 파일을 가져 오지 않으려는 경우에 사용됩니다. 예를 들어 순환 종속성을 피할 필요가있을 때

관련 문제