gpt4 book ai didi

objective-c - super allocWithZone 对单例类概念有一些疑问

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

我是 Objective-C 的新手,我正在尝试基于 Apple's documentation 创建一个单例类.

+ (MyGizmoClass*)sharedManager
{
if (sharedGizmoManager == nil) {
sharedGizmoManager = [[super allocWithZone:NULL] init];
}
return sharedGizmoManager;
}

+ (id)allocWithZone:(NSZone *)zone
{
return [[self sharedManager] retain];
}

在此代码中,sharedManager 是一个静态方法,它将检查此类的对象是否存在。如果是,它将返回之前创建的对象,否则将创建一个新对象。

我有一些问题:

  1. 如果sharedManager是静态的,它如何访问super

  2. 当我打印 [super class] 时,为什么给出当前类名?

  3. 为什么[[super allocWithZone:NULL] init]返回当前类对象?

  4. 如果 super 等于 self 这里为什么不调用当前类的 allocWithZone:(NSZone *)zone

最佳答案

其他答案虽然指出了有关单例的良好信息,但实际上并没有回答您的问题。您的问题实际上主要基于面向对象,您专门引用单例这一事实是偶然的。

  1. 我回答了 this question引用 self,这里是答案的重要解释部分

    super does have meaning in class level contexts, but it refers to the superclass itself, not an instance

  2. 这个也让我失望了。我问了this question并得出结论:

    [super class] calls the super method on the current instance (i.e. self). If self had an overridden version, then it would be called and it would look different. Since you don't override it, calling [self class] is the same as calling [super class].

  3. 您确定它实际上返回了此类的一个实例吗?还是将其分配给此类的实例 sharedGizmoManager

  4. Super 不等于 self,但是您调用的一些方法:例如[super class] 正在调用 [self class] 将调用的方法的相同实现。

关于objective-c - super allocWithZone 对单例类概念有一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826363/

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