假设我有一个名为甲板甲板的属性,
@property (strong, nonatomic) Deck *deck;
我可以懒散地实例化如下,
- (Deck *)deck{
if(!_deck) _deck = [[Deck alloc] init];
return _deck;
}
但是可以使用C三元运算符懒惰地实例化它,如下所示?
- (Deck *)deck{
return _deck ? _deck:[[Deck alloc] init];
}
答案 0 :(得分:7)
我实际上更喜欢你的初始版本,因为它很容易阅读。
如果您想获得更多花哨并编写更少的代码,可以使用Conditionals with Omitted Operands,这是一个GCC扩展 Clang也理解:
- (Deck *)deck{
return _deck ? : (_deck = [[Deck alloc] init]);
}
_deck
仅评估一次,仅在nil
时分配。
答案 1 :(得分:2)
你可以这样做
- (Deck *)deck {
_deck = _deck ? _deck : [[Deck alloc] init];
return _deck;
}
如果你使用你提出的懒惰吸气剂,除非在其他地方完成,否则永远不会设置_deck
...也就是说,你实际上从未在第二种方法中设置_deck
。相反,您每次都会获得一个新的Deck
。