假设我有一个名为 deck of class Deck 的属性,
@property (strong, nonatomic) Deck *deck;
我可以懒惰地实例化它,如下所示,
- (Deck *)deck{
if(!_deck) _deck = [[Deck alloc] init];
return _deck;
}
但是,是否可以使用 C 三元运算符延迟实例化它,如下所示?
- (Deck *)deck{
return _deck ? _deck:[[Deck alloc] init];
}
我实际上更喜欢您的初始版本,因为它易于阅读。
如果你想花哨并编写更少的代码,你可以使用带有省略操作数的条件,这是一个 GCC 扩展也被叮叮当当理解:
- (Deck *)deck{
return _deck ? : (_deck = [[Deck alloc] init]);
}
_deck
仅评估一次,并且仅在nil
时才分配给 。
你可以这样做
- (Deck *)deck {
_deck = _deck ? _deck : [[Deck alloc] init];
return _deck;
}
如果你使用你提议的懒惰getter,除非在其他地方完成,否则_deck
永远不会被设置......也就是说,您从未在第二种方法中实际设置_deck
。相反,您每次都会得到一个新的Deck
。