我可以在NSCache中的setObject之后立即信任objectForKey吗?

时间:2013-05-19 14:04:14

标签: ios objective-c nscache

考虑此示例代码(缓存是NSCache的一个实例):

- (id)objFromCache
{
    if ([cache objectForKey:@"myObject"] == nil)
        [cache setObject:[self generateObject] forKey:@"myObject"];

    return [cache objectForKey:@"myObject"];
}

我应该相信这段代码吗?我的意思是,objectForKey:@"myObject"之后setObject:forKey:@"myObject"会不会立即返回?如果是这样,我应该将if更改为while吗?

处理这种情况的最佳方法是什么?谢谢!

1 个答案:

答案 0 :(得分:3)

至少在多线程环境中,您不能假设NSCache返回对象 你刚插入的。

此外,如果第一个调用[cache objectForKey:@"myObject"]未返回nil,则return语句中的第二个调用可能会返回nil

所以我会安全地播放你的方法

- (id)objFromCache
{
    id value = [cache objectForKey:@"myObject"];
    if (value == nil) {
        value = [self generateObject];
        [cache setObject:value forKey:@"myObject"];
    }
    return value;
}