0

重複の可能性:
Objective C —サブクラスのインスタンス変数タイプを狭めますか?

プロパティを持つというクラスParentClassがありUIViewます。ChildClassのサブクラスであるというクラスもありParentClassます。明らかにプロパティChildClassを継承しますが、確かに私はこのプロパティにのみを使用することを知っています。UIViewChildClassUIScrollView

私の質問は、どういうわけかプロパティを「サブクラス化」しUIView、名前を変更して、それが唯一のようになるようにすることは可能/実行可能UIScrollViewですか?合成するときに.mファイルのプロパティをオーバーライドする必要がありますか?

のようにではなく、のUITableViewControllerメインビュープロパティがどのようになっているのかと似ています。UITableViewUIViewUIViewController

更新:たぶん、私はプロパティだけでなく、変数自体も意味していませんでした。

4

3 に答える 3

2

同じ名前のプロパティを子クラスに追加するだけですが、の代わりにUIScrollViewを使用しUIViewます。

于 2012-06-07T05:44:52.770 に答える
1

サブクラス化する場合ParentClass、それはaのプロパティを持ち、 ..を継承するUIView必要があります。プロパティを作成して、継承して使用できるようにする必要があります。ChildClassUIScrollViewUIScrollViewParentClassChildClass

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:メソッドは、プロパティが変換されたメソッドの1つであるため、で定義するとChildClass、親クラスのメソッドがオーバーライドされます。

補足:プロパティを「サブクラス化」する場合、正しい用語は「オーバーライド」です。

于 2012-06-07T05:46:46.243 に答える