2010-03-06 13 views
21

Ho un protocollo in Objective-C, qualcosa di simile:Metodo statico del protocollo Objective-C?

@protocol Handler 
+(NSString*) getValue; 
@end 

Così ora dire che ho un'istanza che eredita questo protocollo e voglio chiamare questo metodo:

[handlerInstance getValue]; 

Questo dà un avviso perché il metodo getValue non è un metodo di istanza. Come posso chiamare correttamente questo metodo dalla mia istanza? (Senza conoscere la classe concreta)? Sto indovinando qualcosa di simile, ma non sono esattamente sicuro:

[[handlerInstance class] getValue]; 

risposta

20
[[handlerInstance class] getValue]; 

Sì, come questo.

A differenza di Java e C++, i metodi di classe possono essere inviati solo alla classe.

+0

Seriamente, immagino che non avrei dovuto pensarci un secondo! – Kyle

+4

Non tutti noi. Provare prima di postare non dare agli altri il beneficio della conoscenza. Sono venuto qui alla ricerca di come questo si sarebbe comportato perché 1.) era più veloce di provarlo e 2.) se ci fossero insidie ​​a cui non avevo pensato, qualcuno probabilmente le noterebbe qui. Pubblicare prima è quindi meno lavoro per tutti quelli che vengono dopo. Grazie Kenny e Zenox. – Warren

+1

Quindi, se ho una variabile 'id handler', assegno' instance' o '[instance class]'? Funzionerà anche senza un'istanza disponibile? (Solo una 'Classe ')? – chakrit

Problemi correlati