objective-cでシングルトンパターンを作成する方法はありますか?これにより、クライアントコードはそのサブクラスのいずれかの共有インスタンスを取得できますか? Objective-cシングルトンのベースクラス
は、私が試した:@interface Base : NSObject {}
+(id)instance;
@end
@implementation Base
static id _instance;
+(id)instance {
if (!_instance) {
_instance = [[self alloc] init];
}
return _instance;
}
@end
でも呼び出す任意のサブクラスの[AmazingThing instance]
は唯一このメカニズムによって作成された最初のインスタンスを返す、どんなタイプ_instance
はありません。任意の清潔な回避策?私は私がなるように実装を変更することで、探していたものを行うことができます
編集は
(削除された答えに返信ながら)私は実現:
static NSMutableDictionary *_instances;
+(id)instance {
if (!_instances) {
_instances = [[NSMutableDictionary alloc] init];
}
id instance = [_instances objectForKey:self];
if (!instance) {
instance = [[self alloc] init];
[_instances setObject:instance forKey:self];
}
return instance;
}
期待どおりに機能するようになりました。それでも、もっと良い方法があるかどうかを知りたいと思っています。
ただの好奇心から外れていますこれのユースケースは何ですか? – ennuikiller
@ennuikiller私はエンティティ/コンポーネントシステムを作っています。プロトタイプを作成するために、すべてのコンポーネントのシングルトンが必要です。 – sharvey
あなたの編集は私の場合には非常に良い解決策です。ありがとう! – Adem