Iphone 目标C:如何使用呼叫儿童&x27;什么是方法的版本?
我以前遇到过这种需要。现在,我有一个函数,每0.1秒调用一次,以检查经过了多少时间。如果超过“总时间”(它从Iphone 目标C:如何使用呼叫儿童&x27;什么是方法的版本?,iphone,ios,objective-c,Iphone,Ios,Objective C,我以前遇到过这种需要。现在,我有一个函数,每0.1秒调用一次,以检查经过了多少时间。如果超过“总时间”(它从getTotalTime函数中检索),则停止。getTotalTime方法在子对象中被重写。每0.1秒调用一次函数的代码也会被重写,但是父类中使用getTotalTime的原始方法是使用super调用的,它只需要调用子类的getTotalTime方法,而不需要调用自己的方法。当然,这就是问题所在。我可以从每个孩子的父母那里重写代码,但这似乎很愚蠢。一些谷歌搜索已经用其他语言显示了解决方案,
getTotalTime
函数中检索),则停止。getTotalTime
方法在子对象中被重写。每0.1秒调用一次函数的代码也会被重写,但是父类中使用getTotalTime
的原始方法是使用super
调用的,它只需要调用子类的getTotalTime
方法,而不需要调用自己的方法。当然,这就是问题所在。我可以从每个孩子的父母那里重写代码,但这似乎很愚蠢。一些谷歌搜索已经用其他语言显示了解决方案,但没有用Objective-C。有没有办法做到这一点?如果没有,有哪些替代方案
每0.1秒调用一次函数的代码也被重写,
但是父类中使用getTotalTime的原始方法是
使用super调用,只需调用子对象的
获取时间,而不是它自己的时间
你的问题很难解析,但听起来你有这样的问题:
@interface A : NSObject // the "parent" class
- (void) timerMethod;
- (NSDate*) getTotalTime;
// other methods as necessary
@end
@interface B : A // the "child" class
// only has overrides of A's methods
@end
@implementation A
- (void) timerMethod
{
NSLog(@"[A timerMethod]: the time is: %@", [self getTotalTime]);
}
- (NSDate *) getTotalTime
{
return [NSDate date];
}
@end
@implementation B
- (void) timerMethod
{
NSLog(@"[B timerMethod]: the time is: %@", [self getTotalTime]);
[super timerMethod];
}
- (NSDate *) getTotalTime
{
return [NSDate dateWithTimeIntervalSinceNow:3600]; // 3600 == an hour from now
}
我想你关心的是,B的-timerMethod
调用A的-timerMethod
,而A的-timerMethod
又调用[self-gettotalime]
,所以你认为A的-gettotalime
总是要调用的。放心吧,继承不是这样工作的。如果您有一个B实例,并且调用了B的一个方法,那么self
表示指向该B实例的指针,即使在继承方法的上下文中也是如此。也就是说,self
指向同一个对象,即使在A的某个方法中也是如此。因此,如果您有一个计时器将-timerMethod
发送到B的实例,则会发生以下情况:
- B的
被调用-timerMethod
- 该方法调用[super timerMethod],这导致调用a的
-timerMethod
- A的
调用-timerMethod
,由于[self-gettotalime]
是指向B实例的指针,因此调用B的self
-gettotalime
就是只要想使用当前对象提供的方法,就可以使用
self
。这就是所谓的继承。。。它存在于objective-c中。还有一件事,如果你想叫你孩子的方法。确保从该类(子类)而不是父类创建对象。向我们展示getTotalTime
的代码和“每隔.1秒调用一次函数”。向我们展示超类和子类的版本。还不清楚你想要什么,给我们展示你的代码或类似的例子。在父类中调用getTotalTime将调用child方法,如果您像[self getTotalTime]那样调用它,我同意@robmayoff——如果您提供了说明您所问问题的代码,这将是一个更好的问题。我提供了一个简单的版本,我认为它再现了你所说的情况,但我真的不应该这样做(我仍然不确定我是否正确理解了你)。