Разница между фабричными методами и конструкторами
Цель обучения и 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:
может решить эту проблему.
Эх, теперь вы должны называть их фабричными методами. Сожалею. История такая же.