我对懒惰实例化的最佳编码实践有疑问。
我有一个自定义类(MainClass),它构成了我的视图控制器的模型。 MainClass的一个属性是另一个自定义类(SubClass)。 现在让我们说我想从我的视图控制器访问并设置SubClass的一些属性。 我应该在MainClass中实例化SubClass吗?
在MainClass中实例化SubClass,在每次我想设置其中一个属性时,都可以省去检查SubClass是否存在(以及在它不存在时创建它)的麻烦。
另一方面,虽然只有SubClass存在时我才能在视图中设置变量。让我解释一下。假设我只想在SubClass.name存在的情况下设置textfield的stringValue。每次我要求存在SubClass.name时,MainClass都会懒惰地实例化SubClass,这是一种浪费。
最好的方法是什么?
答案 0 :(得分:0)
你需要对美学做出决定,如果这是推动这个问题的原因,或者你需要解释性能限制。
是的,懒惰初始化有优点和缺点。
优点
劣势
混合方法是可行的。对于重要任务,请使用延迟实例化:
- (void) display {
[self initialize];
[self display];
}
对于不重要的任务,只需检查初始化。
- (void) updateCaches {
if ([self isInitialized]) {
[self reloadCachedDataFrom: [self startDatabaseSession]];
}
}
您不希望构建对象只是为了更新其缓存,但是,如果对象是实时的,您可能希望继续保持缓存温暖。所以,你看看你是否已经实例化了这个对象,并且只有在已经设置了缓存的情况下才重新加载缓存。