2014-08-31 3 views
1

У меня есть базовый класс, который позволяет сказать BaseClass, который выполняет некоторые логические и ручные жесты. У меня есть еще один класс FooBarClass, который предоставляет представление и также является подклассом BaseClass, (FooBar : Base).Отправка сообщения от суперкласса к подклассу

Я знаю, что я могу назвать методы в суперклассе super methodName. Я застрял в ситуации сейчас, все взгляды разработаны таким образом, и теперь мне нужно передать сообщение от FooBar до Base.

Возможно ли это? Если да, то как? Должен ли я использовать NSNotifications или есть лучший способ сделать это?

+0

Переопределяя методы в 'FooBar', вы можете фактически вернуть данные в родительский класс. Также как источник данных. –

+0

@InderKumarRathore Я думаю, что OP задает противоположное этому, если я не ошибаюсь. – GoodSp33d

ответ

0

Если вы создаете экземпляр подкласса, который в вашем случае равен FooBarClass, вам не нужно беспокоиться о переходе сообщения от суперкласса к подклассу. С наследованием любые свойства, методы отображаются в файле заголовка (.h) BaseClass, могут быть доступны из FooBarClass. Если методы, относящиеся к BaseClass, были переопределены в FooBarClass, тогда вам необходимо явно использовать super, иначе вы можете напрямую позвонить self. Однако, если свойства, принадлежащие BaseClass, были переопределены в FooBarClass, тогда эта переменная будет удерживать значение, которое было сохранено последним. Вот почему, как правило, свойства никогда не переопределяются, так как они запутываются.

И, наконец, нет необходимости в NSNotification.

Пример: BaseClass.h

@interface BaseClass : UIView 

- (void)runTest; 
- (void)sayHi; 
- (void)sayHi2; 
@property (assign, nonatomic) NSInteger commonVar; 
@end 

BaseClass.m

- (void)runTest 
{ 
    self.commonVar = 100; 
} 
- (void)sayHi 
{ 
    NSLog(@"Hi from super"); 
    NSLog(@"In super variable = %d", self.commonVar); 
} 
- (void)sayHi2 
{ 
    NSLog(@"Hi from super2"); 
} 

FooBarClass.h

@interface FooBaseClass : BaseClass 

@property (assign, nonatomic) NSInteger commonVar; 
@end 

FooBarClass.m

- (void)runTest 
{ 
    self.commonVar = 1; 
    [super runTest]; // Now, commonVar variable will be holding 100 throughout. 
    [super sayHi]; 
    [super sayHi2]; // Same as next line because there is no sayHi2 overridden. 
    [self sayHi2]; 
    [self sayHi]; 
} 

- (void)sayHi 
{ 
    NSLog(@"Hi from derived"); 
    NSLog(@"In derived variable = %d", self.commonVar); 
} 

Надеюсь, этот ответ вам поможет.

Смежные вопросы