gpt4 book ai didi

Objective-c:在基类上调用 [self message] 是调用后代方法

转载 作者:太空狗 更新时间:2023-10-30 03:56:44 25 4
gpt4 key购买 nike

我刚开始学习这个,如果这有一些我仍然无法掌握的明显解决方案,我很抱歉。

我有这两个类:

@implementation Person
-(void)saySomething:(NSString*) something {
NSLog(@"%@",something);
}
-(void)yellSomething:(NSString*) something {
[self saySomething:[something uppercaseString]];
}
@end

@implementation ShoutingPerson : Person

-(void)saySomething:(NSString*)something {
[super yellSomething:something];
}

@end

这会导致循环引用调用,因为 saySomething 总是 在后代类上被调用。

如何让 yellSomething 调用 Person 类而不是子类的 saySomething 方法?

最佳答案

你不知道。这就是继承在 Objective-C 中的工作方式。相反,您应该在基类中记录 -yellSomething: 的默认实现只是调用 -saySomething:。然后,不搞砸堆栈跟踪就变成了子类的责任。

如果您真的希望能够更改什么调用什么,请在您的基类中添加第三种方法:

-vocalizeSomething: (NSString *)what loudly: (BOOL)loudly;

是说话的人。 -saySomething:-yellSomething: 都直接调用它而不是互相调用。然后子类可以安全地覆盖其中一个方法来调用另一个方法,或者调用 vocalizeSomething:loudly: 而不会创建无限循环。

关于Objective-c:在基类上调用 [self message] 是调用后代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com