我是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