2012-04-04 6 views
1

Я использую Objective-C в своем приложении, и у меня есть вопрос о множественном наследовании в объявлениях @interface.@interface множественное наследование?

Практически это то, что мой .h выглядит сейчас:

#import "cocos2d.h" 

    @interface UIViewController (Save) 

    - (void)saveImage:(UIImage*)image:(NSString*)imageName; 
    - (void)removeImage:(NSString*)fileName; 
    - (UIImage*)loadImage:(NSString*)imageName; 

    @end 

    @interface CCLayer (Save) 
    - (UIImage*)loadImage:(NSString*)imageName; 
    - (BOOL)checkExists:(NSString*)thePath; 
    @end 

Так как вы можете видеть, я объявил метод LoadImage дважды. Я не хочу этого делать. Это также означает, что для этого метода я должен иметь один и тот же код в моем .m.

Есть ли способ смешать UIViewController и CCLayer в 1 @interface, чтобы мне не нужно было объявлять его несколько раз?

Спасибо!

+3

В Objective-C нет множественного наследования – sidyll

+0

Так что для этого нет обходного пути? Что, если бы у меня было 50 методов одного и того же? Это очень утомительно и неорганизованно. –

ответ

5
  1. ObjC не имеет множественного наследования.
  2. Вы не хотите, чтобы несколько определений одного и того же SEL в одном классе.
  3. вы можете объявить (и принять) протокол. то вы должны определить метод (loadImage:) в @interface, который объявил принятие. вы также можете объявить его в фиктивной категории, затем определите loadImage: в другой области @implementation.
  4. альтернативой этому является композиция - в основном, вы должны добавить переменную экземпляра класса или протокола в свой класс и позволить ему выполнять работу. если это лобковый интерфейс, то вы также можете предоставить ему доступ к нему, или вы можете его обернуть по мере необходимости. это заслуживает рассмотрения, если ваши 50 методов на @interface могут быть логически разделены.
Смежные вопросы