Iphone 目标C:如何使用呼叫儿童&x27;什么是方法的版本?

Iphone 目标C:如何使用呼叫儿童&x27;什么是方法的版本?,iphone,ios,objective-c,Iphone,Ios,Objective C,我以前遇到过这种需要。现在,我有一个函数,每0.1秒调用一次,以检查经过了多少时间。如果超过“总时间”(它从getTotalTime函数中检索),则停止。getTotalTime方法在子对象中被重写。每0.1秒调用一次函数的代码也会被重写,但是父类中使用getTotalTime的原始方法是使用super调用的,它只需要调用子类的getTotalTime方法,而不需要调用自己的方法。当然,这就是问题所在。我可以从每个孩子的父母那里重写代码,但这似乎很愚蠢。一些谷歌搜索已经用其他语言显示了解决方案,

我以前遇到过这种需要。现在,我有一个函数,每0.1秒调用一次,以检查经过了多少时间。如果超过“总时间”(它从
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]
    ,由于
    self
    是指向B实例的指针,因此调用B的
    -gettotalime
因此,如果您的计时器将其消息发送到B的实例,您应该会得到两条日志语句,这两条语句的时间都是从现在起一个小时:

[B timerMethod]:时间为:当前时间+1小时

[计时方法]:时间为:当前时间+1小时

但是,如果计时器将其消息发送到的实例,则只会得到一条log语句,并且它将具有当前时间:

[A timerMethod]:时间为:当前时间

在这样的子类中“重写”方法的能力是使继承有用的关键特性之一;子类可以修改或完全替换来自超类的行为,超类中的代码将在子类的实例中自动调用重写的方法,而不是自己的方法

那么,你的标题问题的答案

如何使用方法的调用子版本


就是只要想使用当前对象提供的方法,就可以使用
self

这就是所谓的继承。。。它存在于objective-c中。还有一件事,如果你想叫你孩子的方法。确保从该类(子类)而不是父类创建对象。向我们展示
getTotalTime
的代码和“每隔.1秒调用一次函数”。向我们展示超类和子类的版本。还不清楚你想要什么,给我们展示你的代码或类似的例子。在父类中调用getTotalTime将调用child方法,如果您像[self getTotalTime]那样调用它,我同意@robmayoff——如果您提供了说明您所问问题的代码,这将是一个更好的问题。我提供了一个简单的版本,我认为它再现了你所说的情况,但我真的不应该这样做(我仍然不确定我是否正确理解了你)。