En Objective-C, els mètodes es poden classificar en dues categories principals: mètodes de classe i mètodes d'instància. Aquesta distinció és fonamental per entendre com es defineixen i utilitzen les funcions dins de les classes.
Mètodes de Classe
Definició
Els mètodes de classe són aquells que es poden cridar directament sobre la classe sense necessitat de crear una instància d'aquesta. Són útils per a operacions que no depenen de l'estat d'una instància específica.
Sintaxi
Per definir un mètode de classe, es fa servir el signe +
abans de la declaració del mètode.
@interface MyClass : NSObject + (void)classMethodExample; @end @implementation MyClass + (void)classMethodExample { NSLog(@"Aquest és un mètode de classe."); } @end
Crida
Per cridar un mètode de classe, es fa servir el nom de la classe seguit del mètode.
Mètodes d'Instància
Definició
Els mètodes d'instància són aquells que es criden sobre una instància específica de la classe. Aquests mètodes poden accedir i modificar les propietats de l'objecte.
Sintaxi
Per definir un mètode d'instància, es fa servir el signe -
abans de la declaració del mètode.
@interface MyClass : NSObject - (void)instanceMethodExample; @end @implementation MyClass - (void)instanceMethodExample { NSLog(@"Aquest és un mètode d'instància."); } @end
Crida
Per cridar un mètode d'instància, primer cal crear una instància de la classe i després cridar el mètode sobre aquesta instància.
Comparació entre Mètodes de Classe i d'Instància
Característica | Mètodes de Classe | Mètodes d'Instància |
---|---|---|
Definició | + |
- |
Crida | [MyClass classMethod] |
[myObject instanceMethod] |
Accés a propietats | No accedeix a propietats d'instància | Pot accedir i modificar propietats d'instància |
Ús | Operacions generals, inicialització de classe | Operacions específiques de l'objecte |
Exemple Pràctic
A continuació, es mostra un exemple pràctic que combina mètodes de classe i d'instància per il·lustrar com es poden utilitzar conjuntament.
@interface Calculator : NSObject + (int)add:(int)a to:(int)b; - (int)multiply:(int)a by:(int)b; @end @implementation Calculator + (int)add:(int)a to:(int)b { return a + b; } - (int)multiply:(int)a by:(int)b { return a * b; } @end int main(int argc, const char * argv[]) { @autoreleasepool { // Crida a un mètode de classe int sum = [Calculator add:5 to:3]; NSLog(@"La suma és: %d", sum); // Crida a un mètode d'instància Calculator *calc = [[Calculator alloc] init]; int product = [calc multiply:5 by:3]; NSLog(@"El producte és: %d", product); } return 0; }
Exercicis Pràctics
Exercici 1
Defineix una classe MathOperations
amb un mètode de classe que calculi el quadrat d'un nombre i un mètode d'instància que calculi el cub d'un nombre.
Solució
@interface MathOperations : NSObject + (int)square:(int)number; - (int)cube:(int)number; @end @implementation MathOperations + (int)square:(int)number { return number * number; } - (int)cube:(int)number { return number * number * number; } @end int main(int argc, const char * argv[]) { @autoreleasepool { int squareResult = [MathOperations square:4]; NSLog(@"El quadrat és: %d", squareResult); MathOperations *mathOps = [[MathOperations alloc] init]; int cubeResult = [mathOps cube:3]; NSLog(@"El cub és: %d", cubeResult); } return 0; }
Exercici 2
Crea una classe Person
amb un mètode de classe que retorni el nombre total de persones creades i un mètode d'instància que retorni el nom de la persona.
Solució
@interface Person : NSObject @property (nonatomic, strong) NSString *name; + (int)totalPersons; - (NSString *)getName; @end @implementation Person static int personCount = 0; + (int)totalPersons { return personCount; } - (instancetype)initWithName:(NSString *)name { self = [super init]; if (self) { _name = name; personCount++; } return self; } - (NSString *)getName { return _name; } @end int main(int argc, const char * argv[]) { @autoreleasepool { Person *person1 = [[Person alloc] initWithName:@"Alice"]; Person *person2 = [[Person alloc] initWithName:@"Bob"]; NSLog(@"Total de persones: %d", [Person totalPersons]); NSLog(@"Nom de la persona 1: %@", [person1 getName]); NSLog(@"Nom de la persona 2: %@", [person2 getName]); } return 0; }
Conclusió
En aquesta secció, hem après la diferència entre mètodes de classe i d'instància en Objective-C, com es defineixen i com es criden. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. Ara estàs preparat per utilitzar mètodes de classe i d'instància en els teus projectes Objective-C.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari