Если вы создаете экземпляр подкласса, который в вашем случае равен 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);
}
Надеюсь, этот ответ вам поможет.
Переопределяя методы в 'FooBar', вы можете фактически вернуть данные в родительский класс. Также как источник данных. –
@InderKumarRathore Я думаю, что OP задает противоположное этому, если я не ошибаюсь. – GoodSp33d