2012-04-29 13 views
14

Angenommen, wir haben eine Klasse mit dem Namen Calculator. Es gibt eine Klassenmethode namens runProgram. Wenn ich diese Klasse Methode aufrufen wollte, innerhalb der Umsetzung der Klasse, was wäre der Unterschied zwischen diesen beiden sein:Aufruf von Klassenmethoden über Klassenname vs Selbst

[Calculator runProgram] 

ODER

[self runProgram] 

Sind diese beiden gleich?

Antwort

31

Wenn innerhalb einer Instanzmethode:

[self runProgram] 

Dabei bedeutet self die Objektinstanz selbst, und daher wird es einen Laufzeitfehler erzeugen. Sie möchten stattdessen

[[self class] runProgram] 

verwenden.

Wenn Sie jedoch diese Methode von einer anderen Klasse-Methode aufrufen, dann

[self runProgram] 

korrekt ist, da jetzt self auf die Klasse selbst bezieht. Ich würde entmutigen

[Calculator runProgram] 

zu verwenden, da dann Unterklassen der Klasse fälschlicherweise die übergeordnete Klasse (Calculator ‚s) Verfahren anstelle eine möglicherweise überschriebene Methode nennen würden.

+1

Mit dem Vorbehalt, dass '[Calculator runProgram]' korrekt für Klassen ist, die explizit nichts mit 'Calculator' zu tun haben, ala die Verwendung der verschiedenen Factory-Methoden? – Tommy

+0

+1: Natürlich, da gibt es keine andere Methode für sie! Aber OP fragte nach dem Aufruf der Methode in der Implementierungsklasse selbst. –