gpt4 book ai didi

ios - 为什么不在每个 getter 中使用惰性实例化

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:29 26 4
gpt4 key购买 nike

在斯坦福大学的类(class)中,Paul Hegarty 更喜欢使用惰性实例化。例如他做了一个私有(private)声明

@property (strong, nonatomic) (NSArray *)cards

然后他使用getter进行初始化

- (NSArray *) cards
{
if(!_cards) _cards = [[NSArray alloc]init]
return _cards;
}

我对此很满意。但我不明白的是,在另一次 Paul 宣布对扑克牌提起公诉:

 @property (strong, nonatomic) NSString *suit;

但在实现中他并​​没有执行这种惰性实例化。所以我不明白 suit string 的 alloc init 在哪里发生? (suit 是指向 NSString 的指针——应该在堆中占有一席之地的对象)

#import "PlayingCard.h"

@implementation PlayingCard
@synthesize suit = _suit;

- (void)setSuit:(NSString *)suit
{
if ([@[@"♣︎", @"♠︎", @"♥︎", @"♦︎"]containsObject: suit]) {
_suit = suit;
}
}

- (NSString *)suit
{
return _suit? _suit: @"?";
}
@end

最佳答案

该属性是公开的,因此他假设它将设置在某个地方。当您设置此属性时,您可以分配、初始化,然后将其设置为扑克牌实例,例如:

PlayingCard *playingCard = [PlayingCard new];
[playingCard setSuit:@"spade"];

如果属性是私有(private)的(因此您不能在类外初始化它),则使用惰性初始化,但您不想在类的init 方法中初始化它。

关于ios - 为什么不在每个 getter 中使用惰性实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23199807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com