同じクラスから継承する 2 つのクラスがあります。各クラスには、クラスと同じ名前の対応する JSON ファイルがあります。インスタンスが作成されるたびに JSON が読み込まれるのを避けるために、クラス メソッドと静的変数を追加しました。
static NSArray *map = nil;
+(NSArray *)map {
if (!map) {
map = [NSJSONSerialization JSONObjectWithData:
[NSData dataWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:NSStringFromClass([self class])
ofType:@"json"]]
options:0
error:nil];
}
return map;
}
このメソッド (文字通りコピーして貼り付けたもの) を両方のサブクラスに追加しました。
これをスーパークラスに移動したいのですが、そうすると、静的変数が両方のサブクラスのインスタンス間で共有され、最初に作成されたインスタンスを持つクラスに対応する JSON マップのみが読み込まれ、後続のすべてが読み込まれます。他のクラスのインスタンスは間違ったマップを返します。
では、対応する JSON ファイルをサブクラスごとに 1 回だけロードし、各サブクラスに独自のマップを持たせるにはどうすればよいでしょうか? (理想的には、コードをコピーして貼り付けないでください)