singletonProtocol を設定したい。そのプロトコルを実装するクラスは +(id) シングルトンをサポートします
明らかに、そのシングルトン メソッドを実装します。同じことを何度も実装し直すのはもったいない。
継承を使用できます。その方法は既に知っていますが、クラスは親を 1 つしか持つことができず、継承を使用するのはやり過ぎのように聞こえます。基本的に、それぞれのクラスの NSStringFromClass をキーとする NSMutableDictionary にシングルトンを格納します。なぜ誰もそれをしないのだろうか。これは、Objective-c で使用したのと同じ手法です。スコープがクラス全体である変数をどのように使用できますか (ただし、サブクラスは含まれません)。
#import "BGSuperSingleton.h"
static NSMutableDictionary * allTheSingletons;
@implementation BGSuperSingleton
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
id result = allTheSingletons[className];
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
}
return result;
}
@end
カテゴリ使えます。ただし、カテゴリは実質的にすべてのクラスで機能します。すべてのシングルトンが SuperSingleton クラスに属するように制限することはできますが、それは目的に反します
プロトコルを使用できます。今、それは素晴らしいです。ただし、プロトコルには実装がありません。プロトコルは、クラスが実行できるメソッドのみを宣言します。
それで、私は何をすべきですか?