在Objective-C中,Factory Method和Convenience Initializer有什么区别?

时间:2015-09-21 17:43:07

标签: objective-c constructor initialization factory

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

如果你需要用属性实例化你的对象,你会写一些像
的东西 -initWithProperty1:(Property1*)prop1 andProperty2:(Property2*)prop2

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

我一直以为这叫做工厂方法(这是正确的吗?)

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

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

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

1 个答案:

答案 0 :(得分:3)

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

“便利性初始化程序”是来自Swift的术语,而不是ObjC。

“指定初始化程序”是不相关的,除非这种创建方法与任何其他*一样,最终必须调用它。

* initWithCoder:

除外