シングルトンクラスのメンバーを初期化するのに最適な場所はどこですか?Cocoa - Singletonオブジェクト:メンバ変数を初期化する場所は?
私はAppleの基本的なガイドシングルトンの実装を使用しています。あなたはinitsがどのラインで起こったのかを正確に教えてください。コードは以下の通りである:
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // assignment and return on first allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (unsigned)retainCount
{
return UINT_MAX; //denotes an object that cannot be released
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
http://boredzo.org/blog/archives/2009-06-17/doing-it-wrongを読むことができます。あなたは本当にリリースを上書きするシングルトンを望んでいますか?それはバグを隠すだけです。 –
そして、あなたがAppleのドキュメントに従っていることをJon Hessに伝える前に、私はAppleのドキュメントに応じてその投稿を書きました。 –
また、クラスには「メンバー」はありません。あなたが得ることができる最も近いのは、クラスの実装ファイル内の静的変数です。とにかく、クラスメンバーはあなたが初期化したいものではありません。あなたが言うことは、シングルトン*インスタンス*のインスタンス*変数です。 –