¿Cuál es la diferencia entre los métodos que se declaran con - y los métodos que se declaran con +diferencia entre + y - métodos en Objective-C
por ejemplo
- (void)methodname
+ (void)methodname
¿Cuál es la diferencia entre los métodos que se declaran con - y los métodos que se declaran con +diferencia entre + y - métodos en Objective-C
por ejemplo
- (void)methodname
+ (void)methodname
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"];
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.
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)
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.
+(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.
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 *) –
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
UML usa la misma notación. –