Amin Negm-Awad schrieb:
Nein, in 3 kann eine andere Instanz derselben Klasse oder einer Subklasse geliefert werden. Es wäre ein Verstoß von -init (super), ein klassenfremde Objekt zu liefern. -init (super) verspricht einfach eine initialisierte Instanz der Klasse – nicht mehr und nicht weniger. Darauf kann ich mich verlassen und das ist okay.
Du hast eine Klasse A mit einer Subklasse B und C. [A init] liefert unter bestimmten Umständen eine Instanz von B. Wenn du jetzt in init von C "self = [super init]" machst kann es sein dass der Code aus Klasse C versucht ein Objekt der Klasse B zu initialisieren. Und das dürfte in so gut wie allen Fällen ein Fehler sein.
Amin Negm-Awad schrieb:
Und es ist außerordentlich praktisch, die Instanz austauschen zu können. Etwa bei Immutables und bei Twintones. Da kannst du nämlich im +alloc noch nicht feststellen, ob du eine neue Instanz brauchst.Du nennst ja selbst das Beispiel.
Jetzt mache mal den Twintone. Wie willst du denn in +alloc testen, ob der Twintone schon da ist, wenn du noch gar nicht weißt, was du im initWith…: bekommst?