プロジェクトの静的データを保持する単純なシングルトン クラスを作成しました。このシングルトンに初めてアクセスするのは、Cocos2d シーンの onEnter メソッドです。ただし、後で別の方法 (同じシーン) で再度アクセスしようとすると、このシングルトンは既に解放されています。混乱しています。シングルトンの割り当てが解除されないようにするにはどうすればよいですか?
これが私のシングルトンのインターフェース部分です:
#import <Foundation/Foundation.h>
@interface OrchestraData : NSObject
+(OrchestraData *)sharedOrchestraData;
@property (retain, readonly) NSArray *animalNames;
@end
実装:
#import "OrchestraData.h"
@implementation OrchestraData
@synthesize animalNames = animalNames_;
+(OrchestraData*)sharedOrchestraData
{
static dispatch_once_t pred;
static OrchestraData *_sharedOrchestraData = nil;
dispatch_once(&pred, ^{ _sharedOrchestraData = [[OrchestraData alloc] init]; });
return _sharedOrchestraData;
}
-(id)init {
if (self = [super init]) {
animalNames_ = [NSArray arrayWithObjects:@"giraffe", @"giraffe", @"giraffe", @"giraffe", nil];
}
return self;
}
@end
私はこのようにシングルトンを使用しています:
[[OrchestraData sharedOrchestraData] animalNames];
更新: NSZombies を有効にして再調査しましたが、シングルトン自体ではなく、NSArrays がリリースされたように見えます。私は何をしますか?