2012-04-29 2 views
14

Supponiamo di avere una classe denominata Calculator. Esiste un metodo di classe, chiamato runProgram. Se volessi chiamare questo metodo di classe, all'interno implementazione della classe, quale sarebbe la differenza tra questi due essere:Chiamare i metodi di classe tramite nome classe vs self

[Calculator runProgram] 

O

[self runProgram] 

Sono questi sia la stessa cosa?

risposta

31

Se all'interno di un metodo di istanza:

[self runProgram] 

in questo, self significa l'istanza dell'oggetto stesso, e quindi genera un errore runtime. Si desidera utilizzare

[[self class] runProgram] 

invece.

Tuttavia, se si chiama questo metodo da un altro metodo di classe, quindi

[self runProgram] 

è corretto, dal momento che ora self si riferisce alla classe stessa. Mi piacerebbe sconsiglio di usare

[Calculator runProgram] 

perché poi sottoclassi della classe avrebbero erroneamente chiamata superclasse (Calculator 's) metodo al posto di un metodo possibilmente sovrascritto.

+1

Con l'avvertenza che '[Calculator runProgram]' è corretto per le classi che non hanno esplicitamente nulla a che fare con 'Calculator', ala uso dei vari metodi factory? – Tommy

+0

+1: Certo, dal momento che non esiste un altro metodo per loro! Ma OP ha chiesto di chiamare il metodo nella classe implementor stessa. –