Cosa significano i segni più e meno nell’Obiettivo C accanto a un metodo?

Sono molto nuovo nell’objective c e in xcode. Mi piacerebbe sapere cosa significano i segni + e - accanto a una definizione del metodo.

 - (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors; 

+ è per un metodo di class e - è per un metodo di istanza.

Per esempio

 // Not actually Apple's code. @interface NSArray : NSObject { } + (NSArray *)array; - (id)objectAtIndex:(NSUInteger)index; @end // somewhere else: id myArray = [NSArray array]; // see how the message is sent to NSArray? id obj = [myArray objectAtIndex:4]; // here the message is sent to myArray // Btw, in production code one uses "NSArray *myArray" instead of only "id". 

C’è un’altra domanda che si occupa della differenza tra i metodi di class e di istanza .

(+) per i metodi di class e (-) per il metodo di istanza,

(+) metodi di class: –

Sono metodi che sono dichiarati come statici. Il metodo può essere chiamato senza creare un’istanza della class. I metodi di class possono operare solo sui membri della class e non sui membri dell’istanza, poiché i metodi di class non sono a conoscenza dei membri dell’istanza. Non è ansible chiamare i metodi di istanza della class da un metodo di class, a meno che non vengano chiamati su un’istanza di quella class.

(-) Metodi di istanza: –

D’altro canto, prima di poter essere chiamati, è necessario che esista un’istanza della class, quindi è necessario creare un’istanza di una class utilizzando la nuova parola chiave. I metodi di istanza operano su istanze specifiche di classi. I metodi di istanza non sono dichiarati come statici.

+ I metodi sono metodi di class, ovvero metodi che non hanno accesso a proprietà di istanze. Utilizzato per metodi come i metodi di allocazione o di supporto per la class che non richiedono l’accesso alle variabili di istanza

– I metodi sono metodi di istanza – riguardano una singola istanza di un object. Solitamente utilizzato per la maggior parte dei metodi su una class.

Vedi le specifiche della lingua per maggiori dettagli.

La spiegazione definitiva di questo da Apple è qui, sotto la sezione ‘Metodi e messaggi’:

https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html

In breve:

+ significa ‘metodo di class’

(il metodo può essere chiamato senza un’istanza della class istanziata). Quindi lo chiami così:

 [className classMethod]; 

– significa “metodo di istanza”

È necessario prima istanziare un object, quindi è ansible chiamare il metodo sull’object). Puoi istanziare manualmente un object come questo:

 SomeClass* myInstance = [[SomeClass alloc] init]; 

(questo alloca essenzialmente lo spazio di memoria per l’object, quindi initalizza l’object in quello spazio – una semplificazione eccessiva ma un buon modo di pensarci. Puoi allocare e avviare l’object separatamente ma mai farlo – può portare a problemi sgradevoli legati ai puntatori e gestione della memoria)

Quindi chiama il metodo di istanza:

 [myInstance instanceMethod] 

Un modo alternativo per ottenere un’istanza di un object nell’Object C è come questo:

 NSNumber *myNumber = [NSNumber numberWithInt:123]; 

che chiama il metodo di class ‘numberWithInt’ della class NSNumber, che è un metodo ‘factory’ (cioè un metodo che fornisce una ‘istanza pronta’ di un object).

L’Objective C consente anche la creazione di determinate istanze di oggetti usando direttamente la syntax speciale, come nel caso di una stringa come questa:

NSString * myStringInstance = @ “abc”;