Normalerweise, wenn ich Unterklasse von einer UI
Klasse Ich werde den Superklasseninitialisierer von Interesse aufrufen. 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]
anrufen, wenn meine Subklasse NSObject
erweitert?Muss ich [Super Init] oder [Super InitWithCoder] usw. für NSObject aufrufen
Antwort
Technisch, nein. Die documentation for -[NSObject init]
sagt, dass
Die
init
Methode definiert in derNSObject
Klasse führt keine Initialisierung; Es gibt einfachself
zurück.
Weil es ist dokumentiert, und es ist wahrscheinlich schon eine Reihe von Code, der darauf beruht, dass Tatsache ist sehr unwahrscheinlich, dass in zukünftigen Versionen von Mac OS X ändern
Edit:BoltClock's a Unicorn bringt Ein Punkt, den ich gerne hyperbolischer machen würde: Die Gesamtzeit, die durch den Aufruf von -[NSObject init]
für alle Nutzer Ihres Programms eingespart wird, wird wahrscheinlich nie die Debugging-Zeit überschreiten, die Sie übernehmen würden, wenn Sie die Oberklasse für Ihre Klasse ändern anders als NSObject
und vergessen, einen Anruf zuhinzuzufügen.
Vom documentation, es scheint überhaupt keine Initialisierung zu tun:
Die
init
Methode in der NSObject definiert Klasse führt keine Initialisierung; Es gibt einfachself
zurück.
Ich nehme an, es harmlos wäre nicht [super init]
zu nennen, aber es gibt keinen Grund, nicht zu Konventionen zu folgen und, wissen Sie, rufen Sie es trotzdem in der Unterklasse. Zum Beispiel kann Ihre Unterklasse in der Zukunft von einer anderen Klasse erben, die eine Initialisierungslogik in ihrer eigenen -init
-Methode enthalten kann, die Ihre Unterklasse dann benötigt.
Rufen Sie einfach einen der Initialisierer super
in Ihrer Implementierung, weil Sie nur tun sollten, was klar und richtig ist.
- 1. Wann Python Super() .__ Init __() aufrufen?
- 2. if (self = [super init]) vs. if ((self = [super init]))
- 3. Super init vs. übergeordnete .__ init__
- 4. Eine Super-Klasse Super-Klasse Super
- 5. Warum muss ich zuerst super-dealloc aufrufen, und nicht zuerst?
- 6. Objective-c Ist Super-Init eine Klassenmethode oder eine Instanzmethode?
- 7. Soll ViewDidUnload super viewDidUnload oder dealloc aufrufen?
- 8. Java. Wie Super() aufrufen super() in überschriebene Methode (Zucht- Methode)
- 9. Warum in Objective-C verwenden wir self = [super init] statt nur [super init]?
- 10. Aufruf Super-Super-Methode
- 11. [Self-Release], [Self-Dealloc] oder [Super Dealloc] in Init-Methoden?
- 12. Python super() Argumente: warum nicht super (obj)?
- 13. Sollte ich hier wakeFromNib oder initWithCoder verwenden?
- 14. Entspricht super() für functools.singledispatch
- 15. Javascript Vererbung: Super-Konstruktor aufrufen oder Prototypkette verwenden?
- 16. Zweck der Methoden, die nur super aufrufen?
- 17. Mix-Typ() und benutzerdefinierte __init __() mit super() .__ init __()
- 18. RNMK - Super Ausdruck muss entweder null sein oder eine Funktion
- 19. Was ist "Super" in Objective-C? (Selbst! = Super)?
- 20. Warum kann ich Super nicht in define_method mit Überlademethode aufrufen?
- 21. Java Super() Konstruktor funktioniert nicht?
- 22. Javascript - Anruf Super Eltern Elternteil?
- 23. Android BluetoothGatt super Methoden?
- 24. Super Anagram Hilfe für Java
- 25. `[Super ViewDidLoad]` Konvention
- 26. ‚super‘ außerhalb der Funktion oder Klasse
- 27. CLLocationManager nicht Delegat in einem NSObject aufrufen
- 28. Generifying mit „super“
- 29. Change vererbte Super-Methode
- 30. Python Super __init__ Erbe