工厂方法和构造函数之间的区别

时间:2016-07-01 17:01:00

标签: objective-c swift constructor initializer factory-method

目前学习目标和斯威夫特。我理解Obj C中的初始化者和便利初始化者,我理解Factory方法。我也听过“构造函数”一词,但我不确定它们与工厂方法或初始化程序的区别。 “构造函数”只是引用初始化者的另一种方式吗?感谢

1 个答案:

答案 0 :(得分:3)

没有区别。

很长一段时间,创建实例对象的类方法被称为便利分配器或 - 很少 - 构造函数。当实例对象被自动释放时,通常使用术语便利分配器,这对ARC来说并不重要。

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

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

然而,忘记名字。想想他们做了什么以及他们为什么存在:使用经典的+alloc - -init…组合,类没有机会决定创建什么子类型,因为这取决于-init的参数。我们举个例子:NSSArray有两个(私有)子类_NSSmallArray_NSBigArray。它希望从您在-initWithEstimatedSize:方法上作为容量的估计大小中选择子类型。 +alloc如何决定选择和分配哪个子类型?它不知道,你将在init方法上传递什么参数。

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

呃,现在你必须称他们为工厂方法。抱歉。故事是一样的。