【问题标题】:In Objective-C, what is the difference between a Factory Method and a Convenience Initializer?在 Objective-C 中,工厂方法和便利初始化器有什么区别?
【发布时间】:2015-09-21 17:43:07
【问题描述】:

所以每个对象都有默认的初始化方法-init

如果您需要使用属性实例化您的对象,您可以编写类似
-initWithProperty1:(Property1*)prop1 andProperty2:(Property2*)prop2

这将被称为:
[[SomeClass alloc]initWithProperty1:(Property1*)prop1 andProperty2:(Property2*)prop2]

我一直以为这叫工厂方法(对吗?)

但后来我偶然发现了这个 SO 问题: How to write an Objective-C convenience constructor

在哪里看起来“便利构造函数”与工厂方法是一样的?但也许便利构造函数专门使用类方法作为初始化器?所以看起来便利的构造函数看起来像这样:
+someClassWithProperty1:(Property1*)prop1 andProperty2:(Property2*)prop2 并被称为:
[SomeClass someClassWithProperty1:(Property1*)prop1 andProperty2:(Property2*)prop2];

有人知道术语实际上应该是什么吗?在这种情况下,“工厂方法”和“便利构造器”这两个术语是否相同?

【问题讨论】:

  • 我将initWithProperty 方法称为“便利初始化器”,将someClassWithProperty 方法称为“工厂方法”。但这只是基于常识。我不记得在 Apple 文档中看到过这两个术语。
  • 是的,我在文档中找不到任何具体的内容。许多来源的信息相互矛盾——这就是为什么我想说这些术语是可以互换的
  • 是的,这就是英语的工作方式。只要其他人同意你的定义,一个词就可以表示任何你想要的意思:)
  • 哈哈好吧,当我提交更改时,我不确定在提交消息中放入哪个术语。我想与其他人的定义保持一致。此外,如果我阅读其中一个或另一个,我想确保我确切地知道他们在说什么

标签: objective-c constructor initialization factory


【解决方案1】:

“便利构造函数”曾经是苹果官方对这个概念使用的术语;然后他们开始称它为"factory method"。它的性质没有改变:它是a class method that creates an instanceinitWith... 不是工厂方法。

“Convenience initializer”是 Swift 的一个术语,而不是 ObjC。

“指定的初始化器”是无关的,除非这个创建方法,像任何其他*一样,最终必须调用它。


*initWithCoder:除外

【讨论】:

  • 谢谢 Josh,所以在您的 ObjC 中,您更喜欢使用工厂方法还是指定的初始化程序来实例化对象?
  • 个人而言,在ARC下,我几乎总是写一个方便的构造函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多