2010-02-10 17 views

risposta

40

I metodi con prefisso - sono metodi di istanza. Questo significa che possono essere invocate solo in un'istanza di una classe, ad esempio:

[myStringInstance length]; 

Metodi prefisso + sono metodi di classe. Questo significa che possono essere chiamati classi, senza bisogno di un'istanza, ad esempio:

[NSString stringWithString:@"Hello World"]; 
+0

Solo curioso: perché questa scelta di notazione?+/- mi sembra un po 'hackerato (probabilmente perché mi ricorda come perl usi' @ ',' # ',' $ 'per dire * qualcosa *) –

+1

Non posso commentare la scelta della notazione, perché io semplicemente non lo so ... Scusa. Forse qualcun altro lo saprà? – Jasarien

+1

UML utilizza la stessa notazione. –

1

Secondo this page:

I metodi di istanza iniziano con - e i metodi a livello di classe iniziano con +

Vedere this SO question per ulteriori informazioni.

2

meno sono metodi di istanza (accessibile solo tramite un oggetto istanziato)

Plus sono metodi di classe (come in Java Math.abs(), è possibile utilizzarlo senza oggetto instantited)

0

Il primo è un metodo di istanza e il secondo è un metodo di classe. Dovresti leggere la documentazione di Objective-C di Apple per conoscere la differenza.

0

+(void)methodname è una variabile di classe e -(void)methodname è variabile oggetto.

Diciamo che si crea una classe di utilità che ha un metodo per invertire la stringa. La classe che chiami MYUtility.

Se si utilizza +, come

+ (NSString *)reverse:(NSString *)stringToReverse 

si potrebbe usare direttamente come

NSString *reversed = [MYUtility stringToReverse:@"I Love objective C"]; 

se è stato utilizzato un -, come

- (NSString *)reverse:(NSString *)stringToReverse 

bisogna usare:

MYUtility *myUtil = [[MYUtility alloc] init]; 
NSString *reversed = [myUtil stringToReverse:@"There are many ways to do the same thing"]; 

Con la funzione basata sulla classe, è sufficiente chiamare direttamente, ma non si ha accesso a nessuna variabile locale oltre a #defines che è possibile eseguire poiché la classe non viene istanziata.

Ma con il -. (NSString è necessario creare un'istanza della classe prima dell'uso, e si ha accesso a tutte le variabili locali

questa non è una scegliere una cosa e rimanere con esso, molte classi hanno entrambi, basta guarda il file di intestazione per NSString, è pieno di + funzioni e - funzioni

Problemi correlati