「MyClass」から継承する 2 つの子クラスがあり、各子クラスはシングルトンにする必要があります。
継承する他のクラスがない場合、静的インスタンスを取得するためにこのパターンを使用しました。
+ (MyClass *)getInstance
{
static dispatch_once_t once;
static MyClass *instance;
dispatch_once(&once, ^{
instance = [[MyClass alloc] init];
});
return instance;
}
これはうまく機能します。ここで、2 つの新しい子クラス (FirstClass と SecondClass) を追加した場合、どちらも MyClass から継承されます。それぞれの ChildClass を確実に取得するにはどうすればよいでしょうか?
dispatch_once(&once, ^{
// No longer referencing 'MyClass' and instead the correct instance type
instance = [[[self class] alloc] init];
});
FirstClass *firstClass = [FirstClass getInstance]; // should be of FirstClass type
SecondClass *secondClass = [SecondClass getInstance]; // should be of SecondClass type
上記を実行すると、1 番目にインスタンス化したクラスが 2 番目のクラス型として常に返されます。
first: <FirstClass: 0x884b720>
second: <FirstClass: 0x884b720>
// Note that the address and type as identical for both.
getInstance
各子クラスにメソッドを追加せずに、それぞれの子クラスのシングルトンを作成する最良の方法は何ですか?