gpt4 book ai didi

ios - 使用[super peformSelector:]方法时的无限循环

转载 作者:行者123 更新时间:2023-12-01 17:54:38 25 4
gpt4 key购买 nike

我在子类中使用[super performSelector:@selector(aMethod)]方法时遇到无限循环问题,详细信息如下所示:

我有一个BaseClass

@interface BaseClass : NSObject
//- (void) aMethod:(NSString *) aString;
@end

@implementation Parent
- (void) aMethod:(NSString *) aString
{
NSLog(@"Base");
}
@end

和一个子类
@interface SubClass :BaseClass
- (void) aMethod:(NSString *) aString;
@end

@implementation Parent
- (void) aMethod:(NSString *) aString
{
[super performSelector:@selector(aMethod:) withObject:nil];
NSLog(@"Sub");
}
@end

当我向 subClass的实例 SubClass发送消息 [subClass aMethod]时,存在一个无限循环问题,即交替调用 [subClass aMethod:][super performSelector:]

谁能告诉我为什么会这样吗?
我只知道 [super performSelector:]将使用 objc_msgSendSuper发送消息,但是为什么此调用导致了无限循环问题,使我发疯。

最佳答案

您应该使用objc_msgSendSuper()而不是[super performSelector:]

编辑:为了明确起见,performSelector:方法实际上是在NSObject中完全实现的,因此无论您是在self还是super上调用它都没有关系,实现将转到重写的aMethod实现。

@interface BaseClass ()
- (void) aMethod:(NSString *) aString;
@end

最好的选择是在您的子类.m文件中添加一个类扩展名。现在您的子类已经知道该方法,可以调用 [super aMethod:];

关于ios - 使用[super peformSelector:]方法时的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20127714/

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