2015-09-21 2 views
1

Таким образом, каждый объект имеет метод инициализатора по умолчанию, -initВ Objective-C в чем разница между методом Factory и инициализатором удобства?

Если вам нужен объект для экземпляра со свойствами, можно было бы написать что-то вроде
-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];

Кто-нибудь знает, что терминология должна быть на самом деле? Являются ли эти два термина «Factory Method» и «Constructor Constructor» тем же самым в этом контексте?

+0

Я бы назвал 'методу initWithProperty' на«удобство инициализатору», и' someClassWithProperty' метода «фабричный метод». Но это только основывается на общих знаниях. Я не помню, чтобы какой-либо термин использовался в документах Apple. – user3386109

+0

Да, я не могу найти ничего конкретного в документах. Многие источники имеют противоречивую информацию - вот почему я хочу сказать, что условия взаимозаменяемы –

+0

Да, так работает английский язык. Слово означает все, что вы хотите, чтобы это означало, пока другие люди согласны с вашим определением :) – user3386109

ответ

3

«Конструктор удобства» раньше был официальным термином, который Apple использовал для этой концепции; то они начали называть его "factory method". Характер этого не изменился: это a class method that creates an instance. initWith... не является заводским методом.

«Удобство Инициализатор» - это термин от Swift, а не ObjC.

«Назначенный инициализатор» не связан, за исключением того, что этот способ создания, как и любой другой, должен в конечном итоге обратиться к нему.


* За исключением initWithCoder:

+0

. Спасибо, Джош, поэтому в вашем ObjC вы предпочитаете создавать объекты с фабричным методом или назначенным инициализатором? –

+0

Лично, под ARC, я почти всегда пишу конструктор удобства. –

Смежные вопросы