En Objective-C, los métodos se dividen en dos categorías principales: métodos de clase y métodos de instancia. Comprender la diferencia entre estos dos tipos de métodos es crucial para aprovechar al máximo la programación orientada a objetos en Objective-C.

Métodos de Clase

Definición

Los métodos de clase son aquellos que se asocian con la clase en sí misma, no con una instancia específica de la clase. Se utilizan principalmente para operaciones que no dependen del estado de una instancia particular.

Sintaxis

Para definir un método de clase, se utiliza el signo + antes de la declaración del método en la interfaz y la implementación.

// Interfaz
@interface MiClase : NSObject
+ (void)metodoDeClase;
@end

// Implementación
@implementation MiClase
+ (void)metodoDeClase {
    NSLog(@"Este es un método de clase.");
}
@end

Llamada a Métodos de Clase

Los métodos de clase se llaman directamente en la clase, no en una instancia de la clase.

[MiClase metodoDeClase];

Métodos de Instancia

Definición

Los métodos de instancia son aquellos que se asocian con una instancia específica de una clase. Estos métodos pueden acceder y modificar el estado de la instancia.

Sintaxis

Para definir un método de instancia, se utiliza el signo - antes de la declaración del método en la interfaz y la implementación.

// Interfaz
@interface MiClase : NSObject
- (void)metodoDeInstancia;
@end

// Implementación
@implementation MiClase
- (void)metodoDeInstancia {
    NSLog(@"Este es un método de instancia.");
}
@end

Llamada a Métodos de Instancia

Los métodos de instancia se llaman en una instancia específica de la clase.

MiClase *miObjeto = [[MiClase alloc] init];
[miObjeto metodoDeInstancia];

Comparación de Métodos de Clase e Instancia

Característica Métodos de Clase Métodos de Instancia
Definición + antes del nombre del método - antes del nombre del método
Asociación Con la clase Con una instancia específica
Acceso a propiedades No accede a propiedades de instancia Puede acceder y modificar propiedades de instancia
Llamada [MiClase metodoDeClase] [miObjeto metodoDeInstancia]

Ejemplo Práctico

Vamos a crear una clase Calculadora que tenga tanto métodos de clase como de instancia.

// Interfaz
@interface Calculadora : NSObject
+ (int)sumaConNumero1:(int)num1 numero2:(int)num2;
- (int)restaConNumero1:(int)num1 numero2:(int)num2;
@end

// Implementación
@implementation Calculadora
+ (int)sumaConNumero1:(int)num1 numero2:(int)num2 {
    return num1 + num2;
}

- (int)restaConNumero1:(int)num1 numero2:(int)num2 {
    return num1 - num2;
}
@end

// Uso
int resultadoSuma = [Calculadora sumaConNumero1:5 numero2:3];
NSLog(@"Resultado de la suma: %d", resultadoSuma);

Calculadora *miCalculadora = [[Calculadora alloc] init];
int resultadoResta = [miCalculadora restaConNumero1:5 numero2:3];
NSLog(@"Resultado de la resta: %d", resultadoResta);

Ejercicio Práctico

Ejercicio

  1. Crea una clase llamada Conversor que tenga un método de clase para convertir grados Celsius a Fahrenheit y un método de instancia para convertir grados Fahrenheit a Celsius.
  2. Implementa los métodos y prueba su funcionamiento.

Solución

// Interfaz
@interface Conversor : NSObject
+ (float)celsiusAFahrenheit:(float)celsius;
- (float)fahrenheitACelsius:(float)fahrenheit;
@end

// Implementación
@implementation Conversor
+ (float)celsiusAFahrenheit:(float)celsius {
    return (celsius * 9/5) + 32;
}

- (float)fahrenheitACelsius:(float)fahrenheit {
    return (fahrenheit - 32) * 5/9;
}
@end

// Uso
float fahrenheit = [Conversor celsiusAFahrenheit:25];
NSLog(@"25 grados Celsius son %f grados Fahrenheit", fahrenheit);

Conversor *miConversor = [[Conversor alloc] init];
float celsius = [miConversor fahrenheitACelsius:77];
NSLog(@"77 grados Fahrenheit son %f grados Celsius", celsius);

Conclusión

En esta sección, hemos aprendido la diferencia entre métodos de clase e instancia en Objective-C, cómo definirlos, y cómo llamarlos. Los métodos de clase se utilizan para operaciones que no dependen del estado de una instancia, mientras que los métodos de instancia se utilizan para operaciones que sí dependen del estado de una instancia específica. Con esta base, estás preparado para avanzar a temas más complejos en la programación orientada a objetos en Objective-C.

© Copyright 2024. Todos los derechos reservados