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

标签 objective-c swift constructor initializer factory-method

目前正在学习 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/

相关文章:

ios - 呈现 viewController 时控制台警告

Swift根据数据改变tableviewcell的边框颜色

python - self 参数在功能上为什么不同?

c++ - 我可以调用虚函数来初始化基类子对象吗?

java - 找不到符号 - 构造函数 item()

objective-c - Objective-C中延迟执行方法的使用

iphone - popviewcontroller 没有调用 viewWillappear

ios - UIWebView 专注于特定方 block

ios - 返回时出现 Swift ios 错误

ios - 如何禁用 View Controller 的无限循环?