所以似乎懒惰的实例化被广泛使用,并且每个人都知道惰性实例化的优点。
这导致了一个问题:我们应该懒惰地实例化每个对象吗?
我非常怀疑。
所以问题是,懒惰实例化的缺点是什么?
取自(Apple Sample LocateMe)的样本:
- (NSDateFormatter *)dateFormatter {
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
}
return dateFormatter;
}
这将为我们提供仅在需要时初始化此对象的优势。
顺便说一句,上面的样本取自Apple,似乎他们只是懒惰的实例化" readonly"对象。
答案 0 :(得分:2)
好的,我想我会以答案的形式改写我的回复(广告你现在收到的评论太多了)......
在您给出的示例中,多次使用同一个对象实例是安全的,因为其内部状态不受影响。也就是说,它提供服务并且不会在呼叫之间保持状态。
作为一般规则,懒惰实例化仅与单身人士或通过工厂提供的实例相关。例如,在您的示例中,生活在“服务”或应用程序期间的实例 - 例如资源处理。通常,您通常只想在需要时创建新的对象实例。
延迟初始化的优点/缺点是:
另请注意,这是一个实例方法,如果它是null,则设置实例var的值...这意味着,在这种情况下,每个封闭类实例仍然有一个实例(定义此方法的类) )。在此上下文中,您的封闭实例负责清理。真的,我认为这是为了清晰的代码,而不是内存管理。或者封闭类可能是长寿命的,它可以节省重新创建格式化程序(重建时可能比重置更昂贵)。
如果有任何其他想法,将进行编辑。希望它有所帮助。