如何在同一层继承两个类?

时间:2009-02-03 13:55:19

标签: iphone objective-c cocos2d-iphone

我是iPhone领域的新人。我正在尝试使用Cocos2d构建iPhone应用程序。我曾经使用过这种类型的classe -

@interface MenuScene : Scene {}
@end


@interface FlipView : UIImageView
{
    CGPoint startTouchPosition;
    NSString *dirString;
    UIImageView *firstPieceView;   
    UIImageView *secondPieceView;

}
@end

@interface HelloController : UIViewController 
@end


@interface MenuLayer: Layer{        
        Menu * menu;        
    NSString *dirString;
    CGPoint startTouchPosition;
}
-(void) button1: (id)sender;
-(void) button2: (id)sender;
-(void) black_jack: (id)sender;
@end

我希望将两个类(FlipView,HelloController)继承到MenuLayerClass。但我怎么能这样做。实际上会是什么语法。请用代码或语法回复任何评论我是如何做到的。

2 个答案:

答案 0 :(得分:8)

你做不到。正如Clark所说,Objective-C不支持多重继承。这是因为设计师认为多重继承的优点并不能证明它所鼓励的复杂性和糟糕的设计。

相反,他们已经包含了一些能够满足您需求的东西。您可以使用@protocol指令声明“协议”。协议描述了一组类响应但不能将数据添加到对象的方法。

要使用协议,请在超类之后的尖括号中包含协议名称。

e.g。

@protocol myProtocol
-(void)myProtocolMethod
@end

@interface myClass : NSObject <myProtocol>
{
    int someData;
}

将提供一个必须同时响应(void)myProtocolMethod消息的NSObject子类。

那就是说,我同意Clark的观点,你应该检查你的设计 - 有一个FlipView的单个对象,HelloController听起来不太好。您可能应该实现一个FlipController并使用第三个类(模型)来同步两个控制器之间的状态 - 或者如果您的应用程序非常简单,那么只有一个类充当FlipView和UIController的委托。

答案 1 :(得分:1)

你不能,因为Objective-C没有多重继承。另外,将单个类同时视为视图和视图控制器并没有多大意义。