Разница между фабричными методами и конструкторами

Цель обучения и Swift на данный момент. Я понимаю инициализаторы в Obj C и удобные инициализаторы, и я понимаю фабричные методы. Я также слышал термин "конструкторы", но я не уверен, насколько они отличаются от заводских методов или инициализаторов. Является ли "конструктор" просто еще одним способом обращения к инициализаторам? Спасибо

1 ответ

Решение

Нет никакой разницы.

Долгое время методы классов, которые создают объекты экземпляров, назывались вспомогательными распределителями или - редко - конструкторами. Термин распределители удобства часто использовался, когда объект экземпляра был автоматически выпущен, что стало неважно с ARC.

NSString *string1 = [NSString string]; // autoreleased
NSString *string2 = [NSSString new];   // ownership transfer

В основном они представляют собой сочетание +alloc а также -init… плюс - когда это распределитель удобства - -autorelease, Два (?) Года назад или около того начали называть их факторными методами.

Однако забудьте об именах. Подумайте о том, что они делают и почему они существуют: с классическим +alloc--init… Комбинация класса не имела возможности решить, какой подтип создать, потому что это зависит от аргументов -init, Давайте приведем пример: NSSArray имеет два (частных) подкласса _NSSmallArray а также _NSBigArray, Он хочет выбрать подтип из предполагаемого размера, который вы даете в качестве емкости на -initWithEstimatedSize: метод. Как может +alloc решить, какой подтип выбрать и выделить? Он не знает, какой аргумент вы передадите методу init.

С помощью конструкторов или удобных распределителей, распределение объектов может быть параметризовано. +newArrayWithEstimatedSize: или же +arrayWithEstimatedSize: может решить эту проблему.

Эх, теперь вы должны называть их фабричными методами. Сожалею. История такая же.

Другие вопросы по тегам