工厂方法和构造器的区别
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:
可以解决这个问题。
呃,现在你必须调用它们的工厂方法。对不起。故事是一样的。
正在学习 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:
可以解决这个问题。
呃,现在你必须调用它们的工厂方法。对不起。故事是一样的。