工厂方法和构造器的区别

difference between factory methods and constructors

正在学习 Objective 和 Swift。我了解 Obj C 中的初始化器和便利初始化器,并且我了解工厂方法。我也听说过 "constructors" 这个词,但我不确定它们与工厂方法或初始化程序有何不同。 "constructor" 只是另一种引用初始化程序的方式吗?谢谢

没有区别。

很长一段时间 class 创建实例对象的方法被称为便利分配器或 - 很少 - 构造函数。术语便利分配器经常被使用,当一个实例对象被自动释放时,ARC 变得不重要了。

NSString *string1 = [NSString string]; // autoreleased
NSString *string2 = [NSSString new];   // ownership transfer

基本上它们是 +alloc-init… 的组合加上 - 当它是一个方便的分配器时 - -autorelease。两(?)年前左右开始称它们为因子方法。

但是,忘了名字吧。想一想它们的作用以及它们存在的原因:对于 classical +alloc--init… 组合,class 没有机会决定要创建什么子类型,因为这取决于关于 -init 的论点。让我们举个例子:NSSArray 有两个(私有)subclasses _NSSmallArray_NSBigArray。它想从您在 -initWithEstimatedSize: 方法中给出的估计大小中选择子类型作为容量。 +alloc 如何决定选择和分配哪个子类型?它不知道您将在 init 方法上传递什么参数。

使用构造函数或便利分配器,可以参数化对象分配。 +newArrayWithEstimatedSize:+arrayWithEstimatedSize: 可以解决这个问题。

呃,现在你必须调用它们的工厂方法。对不起。故事是一样的。