Wenn ich von einer UI
-Klasse abstammt, rufe ich typischerweise den interessierenden Superklasseninitialisierer auf. Allerdings bin ich mir der Implementierungsdetails von NSObject
nicht sicher, und es sieht so aus, als gäbe es nicht viel in Bezug auf Member-Vars, also frage ich mich: Muss ich [super init]
aufrufen, wenn meine Unterklasse erweitert NSObject
?
Technisch, nein. Die Dokumentation für -[NSObject init]
sagt das
Die Methode
init
, die in der KlasseNSObject
definiert ist, führt keine Initialisierung durch; Es gibt einfachself
zurück.
Da es dokumentiert ist und wahrscheinlich bereits eine Menge Code darauf basiert, ist es unwahrscheinlich, dass sich hoch in zukünftigen Versionen von Mac OS X ändert.
Bearbeiten: BoltClock ist ein Einhorn bringt einen Punkt, den ich gerne noch mehr machen würde hyperbolisch: Die Gesamtzeit, die durch das Nichtaufrufen von -[NSObject init]
für alle Nutzer Ihres Programms eingespart wurde, wird wahrscheinlich niemals die Debugging-Zeit überschreiten, wenn Sie die Superklasse für Ihre Klasse in eine andere als NSObject
ändern und vergessen Fügen Sie einen Aufruf zu [super init]
hinzu.
Aus der Dokumentation , scheint es überhaupt keine Initialisierung zu machen:
Die Methode
init
, die in der NSObject-Klasse definiert ist, führt keine Initialisierung durch; Es gibt einfachself
zurück.
Ich nehme an, es wäre harmlos, [super init]
nicht aufzurufen, aber es gibt keinen Grund, Konventionen nicht zu befolgen und, wie Sie wissen, es trotzdem in Ihrer Unterklasse zu nennen. Zum Beispiel könnte Ihre Unterklasse in Zukunft von einer anderen Klasse erben, die möglicherweise eine Initialisierungslogik in ihrer eigenen -init
-Methode enthält, die dann von Ihrer Unterklasse benötigt wird.
Tags und Links objective-c ios inheritance nsobject superclass