2014-01-17 1 views
0

두 클래스가 있습니다. 그것들을 DogCat이라고합시다. Dog에서메서드 간 순환 종속성을 사용하여 컴파일

는 I 인스턴스는 Cat 있고, Dog는 방법 harrassCat있다. harrassCat 안에는 Cat 메서드 인 swipeAtDogsNose:이 있는데이 메서드는 Dog 속성을 사용하여 출력을 계산합니다.

문제는 헤더 파일에 있습니다. 내가 Cat의 헤더 파일을 Dog으로 가져 와서 속성을 만든다. 그런 다음 harrassCat에서이 속성에 액세스합니다.

지금은 에 인수로 전달 된 모든 필수 속성과 함께 NSArray이 있습니다. Dog의 속성에 직접 액세스하려는 경우 swipeAtDogsNose:, Dog 헤더를 Cat 헤더로 가져올 수 없습니다. 순환 종속성이 발생하고 컴파일에 실패하기 때문에 헤더를 가져올 수 없습니다.

순환 의존성이있는 경우 @class을 사용하여 다른 클래스에 액세스 할 수 있습니다.

- (BOOL)swipeAtDogsNose:(Dog *)theDog; 
+0

@JoshCaswell Nice 편집 : – Arc676

+0

당신이 좋아하는 것을 기쁘게 생각합니다. 나는 항상 'A'와 'B'또는 '1'과 '2'를 따라 가기 힘듭니다. –

답변

2

는 당신이 필요로하는 무엇이다 나는 Dog@class 그렇게 Cat.h의 메소드 선언은 다음과 같이 보입니다 것을 사용하여 가져 어떻게 forward declaration을 호출하고 헤더 파일에있는 다른 클래스의 인터페이스 앞에 선언을 추가하여 선언하십시오. 해당 유형의 @property이있는 경우 당신이 그것을 할 필요가 없습니다

@class ClassB; 

@interface ClassA 
... 

마음, 당신은 어떤 방법 서명이 정의되지 않은 헤더 파일에서 가져올 수없는 유형이 필요 그것은 단지 경우 필요 또는 해당 유형의 클래스 멤버가있는 경우.

기본적으로 헤더에 유형 이름이 표시되면이를 전달해야합니다 (또는 #import 헤더). 그렇지 않으면 #import.m 파일로 사용할 수 있습니다. 다른 헤더 안에 헤더를 가져올 필요가 없습니다. 구현 파일 내에서 가져 오기만으로 충분합니다.

0

를 ClassA :

@class ClassB; 

@interface classA 

@property (strong, nonatomic) classB* propertyThatUseClassB 

@end 

ClassB가 :

@class ClassA; 

@interface classB 

@property (strong, nonatomic) classA* propertyThatUseClassA 

@end 
+0

그리고'.m '파일에'.h' 파일을 가져 오면 모두 설정됩니다. – rmonjo