조금 다른 각도에서 보면 ... 세계가 실제로 myClassB
에 대해 알고 싶은지를 결정해야합니다. MyClassA
입니다. 예를 들어, MyClassA
을 통해 얻을 수있는 myString
을 광고하려는 경우에만 가능합니다. 이렇게하면 다른 클래스가 기본 구현 인 myString
을 알 수 없게됩니다. MyClassB
을 노출 할 필요가 없다면 "나머지 세계"에서 숨길 수 있습니다. 다음과 같이 MyClassA.h 바꿀 것이 경우
: MyClassA.m에서
//
// MyClassA.h
//
@interface MyClassA : NSObject
@property (strong, nonatomic, readonly) NSString *myString;
@end
, 당신은 다음을 수행합니다.
//
// MyClassA.m
//
#import "MyClassA.h"
#import "MyClassB.h"
@interface MyClassA()
@property (strong, nonatomic) MyClassB *myClassB;;
@end
@implementation MyClassA
// Other meaningful code omitted
- (NSString *)myString {
return self.myClassB.myString;
}
@end
내가 여기했던 것은 내부적으로 myClassB
에 대한 속성을 정의에 익명의 범주를 사용하는 것을 참고.
여기서 핵심은 MyClassB
을 다른 사람에게 노출시키지 않는지 여부입니다. 이 접근법의 가장 큰 장점은 코드가 가단성이 있다는 것입니다. myString
이 다른 방식으로 파생되었다고 가정 해 보겠습니다. 다른 수업이나 다른 방법에서 온 것입니다. myString
을 소비해야하는 코드는 예방 접종을받습니다. 당신이 MyClassB
을 노출해야하는 경우 위 또는 MyClassA.h에서 #import MyClassB.h
타일러 권장
, 당신은 @class
을 사용할 수 있습니다. 우수 사례는 앞으로 선언하는 @class
을 처방합니다. 그러나 때로는 구현 파일 내에서 많은 파일을 가져 오는 것을 기억하지 않아도되므로 편리 할 수 있습니다. 그것은 당신의 코드 기반이므로 어떤 것이 가장 적합한 지 선택할 수 있습니다. 나는 일반적으로이 둘의 조합을 사용한다.