0

때로는 프레임 워크 객체가 다음과 같이 * .m 파일 안에 도우미 클래스 인터페이스를 추가합니다.Objective-C에서 중첩 클래스를 확장하는 좋은/최선의 방법이 있습니까?

Foo.m :

@interface HelperObject : NSObject 
/*...*/ 
@end 
@implementation HelperObject 
/*...*/ 
@end 

@implementation Foo 
/*...*/ 
@end 

예를 들어 범주를 사용하여 Foo를 확장하려는 경우, HelperObject도 확장 할 수 있습니까? 더 일반적으로, 캡슐화를 위반하는 것입니까? HelperObject를 확장하지 않고 클래스 기능을 확장해야합니까?

답변

0

발신자에 대한 HelperObject --frequently, 그들은 심지어 존재 모르는 아무것도을 알 수 없습니다. 따라서 다른 파일에서 하위 클래스로 분류하는 것이 안전하지 않거나 유효하지 않습니다.

0

Objective C는 중첩 된 클래스를 허용하지 않습니다 (예 : Java 또는 C++과 달리). 집계를 사용하여 클래스 기능을 확장 할 수 있습니다. 당신이 Pimpl 관용구를 사용할 수있는 것을 숨기고 싶다면, ObjC에서는 필요 없다. 왜냐하면 당신은 그것을 카테고리로 쉽게 대체 할 수 있기 때문이다.

편집 : 범주를 사용하여 HelperObject 개체를 확장하려면 해당 파일을 표시 할 수 있도록 해당 파일을 사용하려는 동일한 파일에서 해당 개체를 선언해야합니다. Foo

+0

그는 pimpl에 대해 질문합니다. 질문을 다시 읽으십시오. :) –

1

카테고리를 사용하여 Helper 또는 Foo를 확장 할 수 있지만 단일 카테고리로 확장 할 수는 없습니다. Helper와 Foo (Helper가 효과적으로 보이지 않는 도우미 클래스 임) 사이의 관계를 감안할 때, 나는 그것을 허용하는 데 많은 가치를 보지 못합니다.

일반적으로 Objective-C는 클래스 나 범주의 다중 상속을 지원하지 않습니다.

그러나 프로토콜을 통한 인터페이스의 다중 상속을 지원합니다.

즉, .m 파일에 Helper와 Foo가 모두 구현 한 프로토콜을 선언 할 수 있습니다.