0

可能重复:
Objective C - 子类中的实例变量类型狭窄?

我有一个名为的类ParentClass,它有一个UIView属性。我还有一个名为ChildClass的类,它是ParentClass. ChildClass显然继承了该UIView属性,但ChildClass我确定我只会将 aUIScrollView用于该属性。

我的问题是,是否有可能/可行以某种方式“子类化”该UIView属性,重命名它并使其只能是一个UIScrollView?合成时是否必须覆盖 .m 文件中的属性?

类似于 aUITableViewController的主视图属性是 a而UITableView不是 a UIViewUIViewController

更新:也许我不是指财产,而是变量本身。

4

3 回答 3

2

只需向您的子类添加一个同名的属性,但使用 UIScrollView 而不是UIView.

于 2012-06-07T05:44:52.770 回答
1

如果您是子类ParentClass化,则它具有 a 的属性UIView并且您需要ChildClass继承 a UIScrollView.. 您应该只在其中创建一个UIScrollView属性,ParentClass以便ChildClass可以继承和使用它。

如果ChildClass不打算使用该UIView属性,如果您从不初始化它将保持不变,nil因此不会耗尽您的任何内存。如果您选择使用该UIView物业,也可以为您提供好处。

或者,如果您不想UIScrollView在其中声明一个新属性ChildClassParentClass

希望这是有道理的,并有所帮助!

于 2012-06-07T05:46:25.733 回答
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覆盖父类上的方法。

旁注:当您提到“子类化”属性时,正确的术语是“覆盖”。

于 2012-06-07T05:46:46.243 回答