我尝试创建一个像这样的静态NSMutableDictionary
static NSMutableDictionary* Textures;
+(Texture*) loadTexture: (NSString*) name path: (NSString*) path{
CGImageRef imageReference = [[UIImage imageNamed:path] CGImage];
GLKTextureInfo* textureInfo = [GLKTextureLoader textureWithCGImage:imageReference options:nil error:NULL];
Texture* texture = [[Texture alloc] init:textureInfo];
if(!Textures) Textures = [[NSMutableDictionary alloc] init];
[Textures setObject:texture forKey:name];
return texture;
}
似乎我只能在字典中添加一个对象,但我相信每次都会创建一个新对象,所以我被困在为什么看起来我只能在这个字典中存储一个对象。此外,它添加了第一个,并且无法添加任何后续调用。
答案 0 :(得分:3)
从代码的给定部分开始,很难说你发生了什么Textures
静态变量(它可能是多线程问题,或者每次运行时事件的name
值相同),所以我可以建议您使用以下方法来解决问题:
+ (NSMutableDictionary *) textures {
static NSMutableDictionary *result = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
result = [NSMutableDictionary new];
});
return result;
}
+ (Texture*) loadTexture: (NSString*) name path: (NSString*) path {
CGImageRef imageReference = [[UIImage imageNamed:path] CGImage];
GLKTextureInfo* textureInfo = [GLKTextureLoader textureWithCGImage:imageReference options:nil error:NULL];
Texture* texture = [[Texture alloc] init:textureInfo];
self.textures[name] = texture;
return texture;
}