Muss ich [super init] oder [super initWithCoder] usw. für NSObject aufrufen?

8

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 ?

    
tacos_tacos_tacos 02.04.2012, 04:21
quelle

3 Antworten

8

Technisch, nein. Die Dokumentation für -[NSObject init] sagt das

  

Die Methode init , die in der Klasse NSObject definiert ist, führt keine Initialisierung durch; Es gibt einfach self 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.

    
John Calsbeek 02.04.2012, 04:24
quelle
4

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 einfach self 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.

    
BoltClock 02.04.2012 04:24
quelle
0

Rufen Sie einfach einen der Initialisierer von super in Ihrer Implementierung auf, da Sie nur das tun sollten, was klar und korrekt ist.

    
justin 02.04.2012 04:34
quelle