2

我是 iPhone 领域的新手。我正在尝试使用 Cocos2d 构建一个 iPhone 应用程序。我已经使用了这种类型的类,如下所示-

@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。但我该怎么做。实际上将是什么语法。请用代码或语法回复任何评论,我该怎么做。

4

2 回答 2

8

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

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

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

例如

@protocol myProtocol
-(void)myProtocolMethod
@end

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

将给出一个也必须响应(void)myProtocolMethod消息的 NSObject 子类。

也就是说,我同意 Clark 的观点,即你应该审查你的设计——拥有一个既是 FlipView 又是 HelloController 的对象听起来并不好。您可能应该实现一个 FlipController 并使用第三个类(模型)在两个控制器之间同步状态 - 或者如果您的应用程序非常简单,则使用一个类作为 FlipView 和 UIController 的委托。

于 2009-02-09T02:10:26.970 回答
1

你不能,因为 Objective-C 没有多重继承。此外,让一个类既是视图又是视图控制器并没有什么意义。

于 2009-02-07T06:06:29.853 回答