2012-04-09 13 views

Antwort

3

init ist eine Instanzmethode. Die Tatsache, dass Sie es auf super aufrufen, ändert es nicht.

Denken Sie daran, dass super nicht die Klasse Ihres Objekts darstellt, sondern Ihr Objekt als eine Instanz seiner übergeordneten Klasse in der Klassenhierarchie.

Und Sie rufen nie myObj=[myObj init]; - Sie rufen myObj = [[MyObj alloc] init]. Beachten Sie die Falldifferenz zwischen myObj (eine Variable) und MyObj (die Klasse, von der diese Variable eine Instanz ist).

+0

Also, was ist das Instanzobjekt der Elternklasse, d. H. In NSObject-Klasse? Es wird normalerweise keine Instanz in der Elternklasse erstellt! – user1232250

+0

Das ist das Konzept der objektorientierten Programmierung. Wenn Sie die Klasse 'MyObj' als eine absteigende Klasse von' NSObject' deklarieren, bedeutet dies, dass jedes Mal, wenn Sie eine Instanz von 'MyObj' erstellen, es * auch * eine Instanz von' NSObject' selbst ist. Sagen wir Erbschaft ist wie Genetik: männliche Menschen sind "Unterklassen" von Menschen, die Unterklassen von Primaten sind, die Unterklassen von Säugetieren sind, die eine Unterklasse von Tieren sind. Nur weil du ein "männlicher Mensch" bist, bedeutet das, dass du auch ein "Mensch", ein "Primat", ein "Säugetier" und ein "Tier" bist. – Cyrille

+0

Ich verstehe jetzt, danke! – user1232250

1

Im Allgemeinen wird init nach alloc auf diese Weise verwendet:

MyObject* obj = [[MyObject alloc] init]; 

und alloc die Objektinstanz erstellen, so ist init eine Instanzmethode, und wenn Sie überschreiben Sie es, es ist gute Angewohnheit, immer die Elternklasse init zu nennen.

Versuchen Sie dies zu lesen article.

1

Super bezieht sich auf die Methoden der Elternklasse im aktuellen Objekt. Der Aufruf super init ruft die Methode init für das aktuelle Objekt (self) auf, verwendet jedoch die Implementierung der Superklasse. So keine - init ist keine statische Methode (dies wäre aufgrund einer + vor der Init-Methode sichtbar). Sie können super whatMethodYouWantFromSuperclass aufrufen, obwohl es nicht statisch ist. Statische Methoden werden für ein Objekt (self), aber für eine Klasse ([NSObject yourStaticMethod]) nicht aufgerufen.

Verwandte Themen