2012-06-07 3 views
0

가능한 중복 :
Objective C — narrow instance variable types in subclasses?"서브 클래스"변수

은 내가 UIView 속성이 ParentClass라는 클래스가 있습니다. 또한 ParentClass 하위 클래스 인 ChildClass이라는 클래스가 있습니다. ChildClass은 분명히 UIView 속성을 상속 받지만, ChildClass에는이 속성에 대해서만 UIScrollView만을 사용합니다.

제 질문은 어떤 식 으로든 UIView 속성을 "서브 클래스"하고 이름을 바꾸어서 UIScrollView 일 수 있도록 만들 수 있습니까? 합성 할 때 .m 파일의 속성을 재정의해야합니까?

UITableViewController의 기본보기 속성이 UIViewUIViewController 대신 UITableView 인 것과 유사합니다.

업데이트 : 어쩌면 나는 속성뿐 아니라 변수 자체를 의미하지 않았을 수도 있습니다.

답변

2

동일한 이름의 속성을 자식 클래스에 추가하기 만하면 UIView 대신 UIScrollView를 사용하면됩니다.

1

당신이 ParentClass를 서브 클래스 화하는 경우는, 그건 UIView의 속성을 가지고 있으며, 당신은 당신이 너무 ChildClass 상속 및 사용할 수 ParentClassUIScrollView 속성을해야한다에 .. UIScrollView을 상속 ChildClass이 필요합니다.

UIView 속성을 사용하지 않을 경우 초기화하지 않으면 메모리를 모두 차지하지 않으므로 nil으로 남습니다. 또한 UIView 속성을 사용하도록 선택하는 경우 또는 혜택을 제공 할 수 있습니다. 당신이 원하지 않는 경우

또는 단순히이 감각을 만들고, 도움이 ParentClass

희망에 ChildClass에 새로운 UIScrollView 속성을 선언!

0

속성은 메서드로 변환되며 이러한 메서드는 다른 개체와 마찬가지로 재정의 될 수 있습니다. 당신이 뭔가를 할 수 있습니다

@interface ParentClass { 
    NSView* myView; 
} 
@property(retain) NSView* myView; 
@end 

@implementation ParentClass 
@synthesize myView; 
@end 

@interface ChildClass 
@end 

@implementation ChildClass 
-(void) setMyView:(NSView*)v; 
{ 
    if([v isKindOfClass:[UIScrollView class]]){ 
     [super setMyView:v]; 
    } else { 
     //do whatever error handling you want to here 
    } 
} 
@end 

-setMyView: 방법은 속성으로 변환 된 방법 중 하나입니다, 그래서 ChildClass에서 그것을 정의하는 것은 부모 클래스의 하나를 우선합니다.

사이드 노트 : 속성을 "서브 클래스하기"참조 할 때 올바른 용어는 "오버라이드"입니다.

+0

불필요하게 복잡하고 중복 된 코드입니다. 이전에 말했던 것처럼 속성을 무시함으로써 간신히 달성 할 수 있기 때문입니다. –

+0

속성을 무시하면 setter의 유형을 확인하지 않습니다. –

관련 문제