【发布时间】:2012-08-06 10:18:33
【问题描述】:
我是 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 是一个静态方法,它将检查此类的对象是否存在。如果是,它将返回先前创建的对象,否则将创建一个新对象。
我有一些问题:
如果
sharedManager是静态的,如何访问super?当我打印
[super class]时,为什么它给出了当前的类名?为什么
[[super allocWithZone:NULL] init]返回的是当前类对象?如果这里
super等于self,那么为什么它不调用当前类的allocWithZone:(NSZone *)zone?
【问题讨论】:
-
你可以去my previous post about singleton pattern implementation看看。如果在实现代码中放置了很多 cmets。希望这会有所帮助
-
你为什么要分配super?你不想要一个 self 的实例吗?
-
那是一份非常古老的文件。
标签: objective-c