我创建了一个简单的单例类来保存我的项目的静态数据。我第一次访问这个单例是在我的 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 被释放了,而不是单例本身。我该怎么办?