在Objective-C中记住@property值

时间:2014-05-07 23:41:51

标签: objective-c

我在类中有属性,我想在运行时懒惰地计算。但是,一旦他们计算出来,他们就不会改变。记忆值是否存在语法糖?现在我到处都有这样的代码:

@property (nonatomic, retain) NSString *bedroomsString;

...

- (NSString *)bedroomsString
{
    if (_bedroomsString == nil) {
        _bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms];
    }
    return _bedroomsString;
}

我想做一些像

这样的事情
@property (nonatomic, retain, memoize) NSString *bedroomsString;

....

- (NSString *)bedroomsString
{
    return [NSString stringWithFormat:@"%@bd", _bedrooms];
}

有人知道这样的事吗?

2 个答案:

答案 0 :(得分:4)

如果它是单个衬垫,你可以做类似的事情

- (NSString *)bedroomsString
{
  return _bedroomsString ?: (_bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms]);
}

或者如果一行变得有点过于笨拙,那么你可以使用

- (NSString *)bedroomsString
{
  return _bedroomsString ?: ({
    _bedroomsString = [NSString stringWithFormat:@"%@bd", _bedrooms]
  });
}

本文在NSHipster

中介绍了这两个方面

答案 1 :(得分:1)

我猜你可以使用this helper

例如:

- (NSString *)bedroomsString
{
    return _MEMO(bedroomsString, ^{
        return [NSString stringWithFormat:@"%@bd", _bedrooms];
    })();
}

对你这个相对较小的例子并没有那么多帮助,但是,如果这个例子更大,这可能会有所帮助。