Не будь ненавистником. : -)
Кстати, я полагаю, вы имели в виду:
( Редактировать: удалены ненужные приведения)
MyClass oClass = [[MyClass alloc] initWithLength:5 andText:@"Hello"];
Причина использования нескольких методов init ... состоит в том, чтобы разработчикам было удобнее создавать правильно инициализированные экземпляры. Так, например, если вы обнаружите, что разработчикам часто нужно создавать экземпляры MyClass с длиной и текстом, вы облегчаете им жизнь, предоставляя API, который позволяет им сделать это за один шаг. И если вы обнаружите, что разработчикам также часто приходится создавать экземпляры MyClass только с текстовой строкой, вы можете также предоставить метод -initWithText:
.
И если экземпляры, созданные таким образом, часто используются как временные объекты (т. Е. Не хранятся в переменных экземпляра или статических переменных), вы также можете добавить вспомогательный метод класса, такой как +myClassWithText:
, который возвращает автоматически выпущенный экземпляр MyClass, инициализированный с помощью предоставленная текстовая строка.
Что лучше: всегда лучше полностью инициализировать объект, когда это возможно, поэтому, если объект требует, чтобы оба значения были правильно инициализированы, используйте метод, который позволяет вам предоставить оба аргумента. И если вам не нужно хранить ссылку на создаваемый экземпляр, используйте удобный метод класса, чтобы вашему коду не приходилось иметь дело с управлением памятью.