我有一个基类让我们说BaseClass
做一些逻辑并处理手势。我有另一个类FooBarClass
,它提供了视图,也是BaseClass, (FooBar : Base)
的子类。
我知道我可以通过super methodName
调用超类中的方法。我现在陷入困境,所有观点都是这样设计的,现在我需要将消息从FooBar
传递到Base
。
这可能吗?如果是这样的话?我应该使用NSNotifications
还是有更好的方法吗?
答案 0 :(得分:0)
如果要创建子类的实例,在您的情况下为FooBarClass
,则无需担心从超类传递到子类的消息。通过继承,可以从BaseClass
访问FooBarClass
的头文件(.h)中公开的任何属性,方法。如果BaseClass
中已覆盖属于FooBarClass
的方法,则必须明确使用super
,否则您可以直接调用self
。但是,如果属于BaseClass
的属性已在FooBarClass
中被覆盖,则该变量将保留最后存储的值。这就是为什么通常,属性永远不会被覆盖的原因,因为它会让人感到困惑。
最后,不需要NSNotification
。
Ex: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);
}
希望这个答案可以帮到你。