我是Objective-C中的新成员,我试图创建基于Apple's documentation的单例类。super allocWithZone在单例类概念中存在一些疑问
+ (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
?
你可以看看[我以前的文章关于单例模式实现](http://stackoverflow.com/questions/6912703/objective-c-static-field-and-implementing-singleton-pattern/6913036#6913036 )。如果在实施代码中提出了很多评论。希望这会有所帮助 – 2012-08-06 11:52:42
你为什么分配超级?你不想要一个自我的例子吗? – 2013-08-06 17:26:35
这是一个令人惊讶的旧文件。 – 2013-08-06 17:26:44