static NSMutableDictionary 只能存储一个对象

static NSMutableDictionary can only store one object

我试过像这样创建一个静态 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;
}

我似乎只能将一个对象添加到字典中,但我相信我每次都会创建一个新对象,所以我对为什么我似乎只能在该字典中存储一个对象感到困惑。此外,它添加了第一个调用并且无法添加任何后续调用。

从给定的代码部分很难说出你发生了什么Textures静态变量(可能是多线程问题,或者每个[=15=的事件相同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;
}