gpt4 book ai didi

ios - 在子类的工厂方法中调用 [super alloc] 会发生什么?

转载 作者:行者123 更新时间:2023-11-29 12:09:39 25 4
gpt4 key购买 nike

示例代码如下:

Class1.h:

@interface Class1 : NSObject
@end

Class1.m

@implementation Class1
@end

Class2.h:

@interface Class2 : Class1
+ (instancetype)class2;
@end

Class2.m:

@implementation Class2
+ (instancetype)class2 {
return [[super alloc] init];
}
@end

主要.m:

int main(int argc, const char* argv[]) {
Class1* o = [Class2 class2];
NSLog(@"%@", [o className]); // shows 'Class2'
return 0;
}

结果表明,在子类的工厂方法中调用[super alloc] 仍然会创建一个子类的对象。那么在这种情况下,它实际上与调用 [self alloc] 相同吗?调用 [super alloc] 时到底发生了什么?编译器和运行时如何处理这个?是否存在调用 [super alloc] 会比 [self alloc] 产生有意义的差异的特定场景?

最佳答案

调用[super 方法] 永远不会返回super 的类。想想常见的情况

self = [super init];
if (self) {
...
}
return self;

构成每个初始化方法的样板。如果对 [super init] 的调用返回了 super 类的一个实例,它就不会工作得很好:)

那么合乎逻辑的结论是 [super alloc] 在功能上等同于 [self alloc],除非子类重写了 alloc .由于在实践中从未这样做过,因此它们对于所有实际情况都是相同的。

但是,我还是不会这样做。看起来有些棘手的事情正在发生,即使实际上并没有。

关于ios - 在子类的工厂方法中调用 [super alloc] 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33885047/

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