2010-02-10 16 views

Respuesta

40

Los métodos con el prefijo - son métodos de instancia. Esto significa que sólo pueden ser invocados en una instancia de una clase, por ejemplo:

[myStringInstance length]; 

Métodos con el prefijo + son métodos de clase. Esto significa que pueden ser llamados clases, sin necesidad de una instancia, por ejemplo:

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

Simplemente curioso: ¿por qué esta elección de notación?+/- me parece un poco hackish (probablemente porque me recuerda cómo perl usa '@', '#', '$' para significar * algo *) –

+1

No puedo comentar sobre la elección de la notación, porque simplemente no lo sé ... Lo siento. ¿Tal vez alguien más lo sepa? – Jasarien

+1

UML usa la misma notación. –

1

Según this page:

Los métodos de instancia comienzan con - y métodos de nivel de clase comienzan con +

Consulte this SO question para obtener más información.

2

menos son los métodos de instancia (sólo se puede acceder a través de un objeto instanciado)

Plus son los métodos de clase (como en Math.abs Java(), puede utilizarlo sin un objeto instantited)

0

La primera es un método de instancia y el segundo es un método de clase. Debería leer la documentación de Objective-C de Apple para conocer la diferencia.

0

+(void)methodname es una variable de clase y -(void)methodname es variable de objeto.

Digamos que se crea una clase de utilidad que tiene un método para invertir la cadena. La clase a la que llamas MYUtility.

Si utiliza +, al igual

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

se podría utilizar directamente como

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

si se utiliza un -, al igual que

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

usted tiene que utilizar:

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

Con la función basada en clase, solo tiene que llamar directamente, pero no tiene acceso a ninguna variable local además de #defines que puede hacer porque la clase no está instanciada.

Pero con el -. (NSString debe crear una instancia de la clase antes de su uso, y tiene acceso a todas las variables locales

Esto no es un elegir una cosa y permanecer con ella, muchas clases tienen tanto, simplemente mira el archivo de encabezado para NSString, está lleno de + funciones y - funciones.

Cuestiones relacionadas