目前正在学习 Objective 和 Swift。我了解 Obj C 中的初始化程序和便利初始化程序,并且我了解工厂方法。我也听说过“构造函数”这个术语,但我不确定它们与工厂方法或初始化程序有何不同。 “构造函数”只是引用初始化程序的另一种方式吗?谢谢
最佳答案
没有区别。
很长一段时间以来,创建实例对象的类方法被称为便利分配器或(很少)称为构造函数。当实例对象被自动释放时,经常使用术语“便利分配器”,这对 ARC 来说变得不重要了。
NSString *string1 = [NSString string]; // autoreleased
NSString *string2 = [NSSString new]; // ownership transfer
基本上,它们是 +alloc
和 -init...
的组合,加上 - 当它是一个方便的分配器时 - -autorelease
。大约两年(?)年前,人们开始将它们称为因子方法。
但是,忘记名字吧。想想它们的作用以及它们存在的原因:使用经典的 +alloc
--init...
组合,类没有机会决定创建什么子类型,因为这取决于关于 -init
的参数。让我们举个例子:NSSArray
有两个(私有(private))子类 _NSSmallArray
和 _NSBigArray
。它想要从您在 -initWithEstimatedSize:
方法中提供的估计大小中选择子类型。 +alloc 如何决定选择和分配哪个子类型?它不知道您将向 init 方法传递什么参数。
使用构造函数或便利分配器,可以参数化对象分配。 +newArrayWithEstimatedSize:
或 +arrayWithEstimatedSize:
可以解决这个问题。
呃,现在你必须将它们称为工厂方法。对不起。故事是一样的。
关于objective-c - 工厂方法和构造函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150588/