Как правило, у вас есть один init*
вариант метода, который является назначенным инициализатором . Все остальные init*
методы обращаются к этому и затем выполняют любую необходимую им настройку. Субклассеры, как правило, либо добавляют новые init*
варианты, которые вызывают [self init*]
на указанном инициализаторе в качестве первого элемента, либо или субклассеры переопределяют указанный инициализатор (и другие, если необходимо).
Однако , это может быстро выйти из-под контроля. Для вашего Круга действительно кажется, что вы просто хотите:
- (id)initWithCenter:...radius:...;
А затем создаст ряд удобных фабричных методов для обработки других типов:
+ circleInRect:...;
(Я подозреваю, что ваш код является надуманным примером, иначе я бы также указал на странность, которая является классом «перекрестия», как подкласс класса «круга». Для чего-то подобного я, вероятно, начну с класс Shape
, а затем добавьте Circle
и Crosshair
в качестве подкласса Shape. Очевидно, пример Sketch
очень актуален.)