Die Initialisierung einer Klasse mit Oberklasse-Initialisierer

Ich habe zwei Klassen, eine Unterklasse der anderen (sagen Animal und Dog). Die Oberklasse hat einige Initialisierungen (sagen initAnimal), die Unterklasse hat einige Initialisierungen (sagen initDog). Das problem ist, dass es perfecly legal (aus compiler-Sicht) etwas zu tun, wie Dog *adog = [[Dog alloc] initAnimal], dh. initialisieren einer Klasse mit Ihrem Oberklasse-Initialisierer. Ich weiß nicht, wie diese, weil die Unterklasse kann zusätzliche Instanz-Variablen, die ich will, um sicherzustellen, werden initialisiert. Ein Blick in die header-Datei löst dieses Problem, aber gibt es eine einfache Möglichkeit, um den compiler-check für mich? Ich habe eine das Gefühl mir fehlt etwas furchtbar offensichtlich, aber ich kann einfach nicht meinen finger auf Sie 🙂

Update: Das initDog und initAnimal waren nicht die besten Beispiele. Ich meinte zwei wirklich unterschiedliche Initialisierungen (wie init für Animal und initWithFur für Dog). Wenn ich wollte, dass jeder Hund zu haben, einige Fell zugewiesen, ich hätte den Pelz Teil der Initialisierung, so dass niemand erwerben könnten, ist ein Hund-Objekt ohne Fell. Aber dann ist es immer noch leicht irrtümlich initialisiert die Instanz mit der Superklasse init, und dann bin ich abgespritzt.

Danke für die vorgesehenen Initialisierungen, Jason. Es trat nicht zu mir vor, aber ich könnten zu einer überlastung der designierte Initialisierer der Oberklasse und einige vernünftige Standards gibt. Aber ich würde es dennoch lieber, wenn ich irgendwie könnte es illegal zu verwenden, andere Initialisierungen als diejenigen, die von der Klasse selbst – mehr Ideen?

  • Okay Zoul, machte ich updates zu meiner Antwort auf die updates zu deiner Frage... es ist ziemlich lange her, aber ich hoffe, es gibt Ihnen einige der Einsichten, die Sie gesucht haben.
  • Da dies ein top-Ergebnis.Die Antwort in der modernen XCode können Sie erreichen, dass mit NS_UNAVAILABLE. Siehe: stackoverflow.com/questions/195078/...
InformationsquelleAutor zoul | 2008-11-10
Schreibe einen Kommentar