我是Objective-C的新手,我正在尝试根据Apple的文档创建一个单例类.
+ (MyGizmoClass*)sharedManager
{
if (sharedGizmoManager == nil) {
sharedGizmoManager = [[super allocWithZone:NULL] init];
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [[self sharedManager] retain];
}
Run Code Online (Sandbox Code Playgroud)
在此代码中sharedManager是一个静态方法,它将检查此类的对象是否存在.如果是这样,它将返回先前创建的对象,否则它将创建一个新对象.
我有一些问题:
如果sharedManager是静态的,它如何访问super?
当我打印[super class]为什么它给出当前的类名?
为什么[[super allocWithZone:NULL] init]返回当前的类对象?
如果super等于self这里,为什么它不调用当前类allocWithZone:(NSZone *)zone?
其他答案虽然指出了有关单身人士的良好信息,但实际上并没有回答您的问题。您的问题实际上主要基于面向对象,您专门引用单例的事实是偶然的。
我参考回答了这个问题self,这是答案的解释,重要部分
super在类级别上下文中确实有意义,但它指的是超类本身,而不是实例
这个也让我失望了。我问了这个问题,得到的结论是:
[super class]调用super当前实例的方法(即self)。如果 self 有一个重写的版本,那么它将被调用并且看起来会有所不同。由于您不覆盖它,因此调用[self class]与调用相同[super class]。
您确定它实际上返回了此类的实例吗?或者您是否将其分配给sharedGizmoManager此类的实例?
Super 不等于 self,而是您调用的一些方法:例如,正在[super class]调用将要调用的方法的相同实现[self class]。
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |