Qual è la differenza tra i metodi che vengono dichiarati con - e metodi che vengono dichiarati con +Differenza tra + e - metodi in Objective-C
esempio
- (void)methodname
+ (void)methodname
Qual è la differenza tra i metodi che vengono dichiarati con - e metodi che vengono dichiarati con +Differenza tra + e - metodi in Objective-C
esempio
- (void)methodname
+ (void)methodname
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"];
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.
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)
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.
+(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
Solo curioso: perché questa scelta di notazione?+/- mi sembra un po 'hackerato (probabilmente perché mi ricorda come perl usi' @ ',' # ',' $ 'per dire * qualcosa *) –
Non posso commentare la scelta della notazione, perché io semplicemente non lo so ... Scusa. Forse qualcun altro lo saprà? – Jasarien
UML utilizza la stessa notazione. –