Czytając dokumentacji Apple na Tips and Techniques for Framework Developers, natknąłem się na tym oświadczeniu o wyznaczonych inicjalizatorów:Kiedy klasa miała więcej niż jeden określony inicjator?
Wyznaczony inicjująca jest metoda init klasy, która wywołuje
init
metody nadklasy. (Inne inicjalizatory odwołują się do metod zdefiniowanych przez klasę.) Każda klasa publiczna powinna mieć jedną lub wyznaczonych inicjalizatorów.
(podkreślenie dodane).
oparciu o moje zrozumienie-i rzeczywiście, bardzo użycie słowa „wyznaczony” -a klasy powinien mieć tylko jeden wyznaczony inicjatora. Ale zgodnie z dokumentacją dopuszcza się wiele wyznaczonych inicjalizatorów.
Zakładając, że masz dwa (lub więcej) wyznaczonych inicjalizatorów, ich rolą jest wywołanie inicjalizowanej nadklasy w celu zagwarantowania prawidłowej inicjalizacji obiektu. Ale jeśli obaj wyznaczeni inicjatorzy nazywają ten sam inicjator tej samej klasy nadrzędnej, to dlaczego potrzebowali więcej niż jednego? Czy klasa nie powinna być refaktoryzowana, aby lejczyć wszystkie inne metody init
do pojedynczego wyznaczonego inicjalizatora?
Po prostu trochę nie rozumiem, jaki przypadek użycia lub wzorzec projektowania wymagałby wielu inicjalizatorów inicjowanych?
Czasami parametry każdego inicjalizatora są zbyt różne, aby przejść do tego samego "określonego" inicjalizatora. Zaleca się, aby inicjatory o najmniejszych parametrach wywoływały pojedynczy inicjator o największej liczbie parametrów, ale nie zawsze ma to sens. – spstanley
Nawet w przypadku, gdy twoja klasa może mieć inicjatory o bardzo różnych parametrach, czy nie powinien być odpowiedzialny tylko jeden inicjator w celu wywołania inicjalizatora nadklasy? Czy druga osoba nie powinna dostosowywać swoich parametrów i w związku z tym wywoływać wewnętrznie inicjalizowany inicjator? – LucasTizma