gpt4 book ai didi

objective-c - objective-c 代码中的段错误

转载 作者:行者123 更新时间:2023-12-03 12:29:27 24 4
gpt4 key购买 nike

在子类[self display]方法中添加+display消息后,出现了Segmentation Fault。我不明白为什么。在说代码应该无限循环之前,请分析整个代码。添加上述消息之前的输出为:

2013-10-15 22:24:30.978 Polymorphism2[657:707] <A1: 0x7fd038c09d00>
2013-10-15 22:24:30.981 Polymorphism2[657:707] <A1: 0x7fd038c09d00>
2013-10-15 22:24:30.981 Polymorphism2[657:707] 10
2013-10-15 22:24:30.982 Polymorphism2[657:707] 60
2013-10-15 22:24:30.982 Polymorphism2[657:707] I'm not multiplying this right now
2013-10-15 22:24:30.983 Polymorphism2[657:707] Superclass!!

还行吧。但是在添加了以上消息 [self display]之后,它应该在 "Superclass!!"行之前再输出一行。它应该是
2013-10-15 22:24:30.983 Polymorphism2[657:707] Subclass!!. 

这是 super class 的代码
@interface Abc: NSObject 

- (void)calculate:(int)x;
- (void)calculate2:(int)x;
+ (void)display;

@end

@implementation Abc

- (void)calculate:(int)x{
NSLog(@"%@",self);
NSLog(@"%d",x);
[self calculate:x];
[self calculate2:x];
}

- (void)calculate2:(int)x{
NSLog(@"%d",x*10);
}

+ (void)display{
[self display];
NSLog(@"Superclass!!");
}

@end

和子类
@implementation A1

- (void)start{
NSLog(@"%@",self);

[super calculate:10];
}

- (void)calculate:(int)x{
NSLog(@"%d",x+50);
}

- (void)calculate2:(int)x{// Overriding
NSLog(@"I'm not multiplying this right now");
}

+ (void)display{
NSLog(@"Subclass");
}

- (void)callClassMethod{
[Abc display];
}

@end

最后,主要
int main(){
A1 *obj= [[A1 alloc] init]; //Subclass object
[obj start];
[obj callClassMethod];
}

最佳答案

如果你打电话

[Abc display];

if将调用 +displayAbc方法,在这种情况下, self解析为 Abc类。

因此
[self display]

解决成
[Abc display]

导致无限循环。

换句话说,如果调用 [Abc display],则没有理由假设 self可以解析为子类,例如 A1

关于objective-c - objective-c 代码中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386883/

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