gpt4 book ai didi

objective-c - 比写几十个空的 getter 更好的方法?

转载 作者:太空狗 更新时间:2023-10-30 04:03:07 26 4
gpt4 key购买 nike

我在我的属性上使用惰性实例化,以尽可能快地创建和使用我的类。为了实现这一点,我写了很多像这样的“空” setter/getter :

- (VMPlacesListFilter *)currentFilter
{
if (!_currentFilter) {
_currentFilter = [[VMPlacesListFilter alloc] init];
}

return _currentFilter;
}

都是一样的:如果实例变量是nil,调用属性类的-alloc-init ,然后返回实例变量。非常常见和直接。

如果我不自己创建这个 getter,Objective-C 的自动合成会为我创建一个 getter,它只做返回部分(如果实例变量为 nil,则不会初始化对象) ).

有什么办法可以避免编写这种样板代码吗?

最佳答案

不,如果你真的想要惰性初始化,恐怕没有好的解决办法。就个人而言,我通常会为可能真正耗时或内存密集型的东西(例如,加载图像或 View Controller )保存惰性初始化,并在 init 中初始化便宜的东西(如简单的数据结构或模型对象) .

- (instancetype) init {
self = [super init];
if( self ) {
_cheapThing1 = [NSMutableArray array];
_cheapThing2 = [[MyModelObject alloc] init];
}
return self;
}

- (ExpensiveThing*) expensiveThing
{
if( _expensiveThing == nil ) {
_expensiveThing = [[ExpensiveThing alloc] init];
}
return _expensiveThing;
}

除非您从磁盘或网络加载某些东西,否则我不会太担心初始化时间。当然,剖析它。

我知道这是一个 Objective-C 问题,但值得注意的是 Swift 内置了惰性初始化。

lazy var currentFilter = VMPlacesListFilter()

关于objective-c - 比写几十个空的 getter 更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775741/

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