Es gibt ein paar Dinge, über Objective-C, die mir sind verwirrend:Wie funktioniert das Erben von NSObject?
Zum einen in der objective-c guide, es ist sehr klar, dass jede Klasse die Methode init seiner Unterklasse aufrufen muss. Es ist ein wenig unklar, ob eine Klasse, die direkt von NSObject erbt, ihre init
-Methode aufrufen muss. Ist das der Fall? Und wenn ja, warum?
Zweitens im Abschnitt über NSObject, gibt es diese Warnung:
Eine Klasse, die kein spezielles Verhalten von einer anderen Klasse zu erben braucht sollte dennoch eine Unterklasse der Klasse NSObject gemacht werden. Instanzen der Klasse müssen mindestens die Fähigkeit haben, sich zur Laufzeit wie Objective-C-Objekte zu verhalten. Die Übernahme dieser Fähigkeit aus der NSObject-Klasse ist viel einfacher und viel zuverlässiger, als sie in einer neuen Klassendefinition neu zu erfinden.
Bedeutet dies, dass ich angeben muss, dass alle Objekte explizit von NSObject erben? Oder ist das wie Java/Python/C#, wo alle Klassen Untertypen von NSObject sind? Falls nicht, gibt es einen Grund, eine andere Root-Klasse als NSObject zu erstellen?
Wie in anderen Posts angemerkt wurde, gibt es manchmal einen Grund, eine andere Root-Klasse als NSObject zu haben. Cocoa enthält die zusätzliche Stammklasse NSProxy, die die Vorteile von NSObject als explizite und nicht als implizite Vererbung darstellt. Es ist richtig, dass es sehr unwahrscheinlich ist, dass ein Drittentwickler eine neue Root-Klasse erstellen sollte. –
+1 Danke, dass Sie mich gerade halten. – fbrereto