El Comptatge Automàtic de Referències (ARC) és una característica de gestió de memòria introduïda per Apple per simplificar la gestió de la memòria en Objective-C. ARC automatitza el procés de retenció i alliberament d'objectes, reduint la càrrega del programador i minimitzant els errors de memòria com les fuites i els accessos a memòria alliberada.
Conceptes Clau
- Referències Fortes i Febles
- Referències Fortes: Una referència forta manté l'objecte viu. Quan un objecte té almenys una referència forta, no serà alliberat de la memòria.
- Referències Febles: Una referència feble no manté l'objecte viu. Si totes les referències fortes a un objecte es destrueixen, l'objecte serà alliberat, i les referències febles es posaran automàticament a
nil.
- Cicle de Vida d'un Objecte
- Creació: Quan es crea un objecte, ARC assigna memòria per a aquest objecte.
- Retenció: Quan una referència forta apunta a un objecte, el comptador de referències de l'objecte s'incrementa.
- Alliberament: Quan una referència forta deixa d'apuntar a un objecte, el comptador de referències de l'objecte es decrementa.
- Destrucció: Quan el comptador de referències arriba a zero, ARC allibera la memòria de l'objecte.
Exemples Pràctics
Exemple 1: Referències Fortes
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.name = @"John Doe";
NSLog(@"Person's name: %@", person.name);
}
// Aquí, l'objecte 'person' es destrueix automàticament quan surt del bloc @autoreleasepool
return 0;
}Exemple 2: Referències Febles
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@end
@implementation Person
@end
@interface Company : NSObject
@property (nonatomic, weak) Person *employee;
@end
@implementation Company
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.name = @"John Doe";
Company *company = [[Company alloc] init];
company.employee = person;
NSLog(@"Employee's name: %@", company.employee.name);
}
// Aquí, l'objecte 'person' es destrueix automàticament quan surt del bloc @autoreleasepool
// i la referència feble 'employee' es posa a nil.
return 0;
}Exercicis Pràctics
Exercici 1: Creació i Alliberament d'Objectes
Descripció: Crea una classe Car amb una propietat model de tipus NSString. Crea una instància de Car dins d'un bloc @autoreleasepool i assigna un valor a la propietat model. Imprimeix el valor de model i observa com ARC gestiona la memòria.
Solució:
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property (nonatomic, strong) NSString *model;
@end
@implementation Car
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *car = [[Car alloc] init];
car.model = @"Tesla Model S";
NSLog(@"Car model: %@", car.model);
}
// Aquí, l'objecte 'car' es destrueix automàticament quan surt del bloc @autoreleasepool
return 0;
}Exercici 2: Referències Febles
Descripció: Crea una classe Owner amb una propietat car de tipus Car (de l'exercici anterior) com a referència feble. Crea instàncies de Owner i Car dins d'un bloc @autoreleasepool i assigna la instància de Car a la propietat car de Owner. Imprimeix el valor de model de car i observa com ARC gestiona la memòria.
Solució:
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property (nonatomic, strong) NSString *model;
@end
@implementation Car
@end
@interface Owner : NSObject
@property (nonatomic, weak) Car *car;
@end
@implementation Owner
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Car *car = [[Car alloc] init];
car.model = @"Tesla Model S";
Owner *owner = [[Owner alloc] init];
owner.car = car;
NSLog(@"Owner's car model: %@", owner.car.model);
}
// Aquí, l'objecte 'car' es destrueix automàticament quan surt del bloc @autoreleasepool
// i la referència feble 'car' es posa a nil.
return 0;
}Resum
En aquesta secció, hem après sobre el Comptatge Automàtic de Referències (ARC) en Objective-C, incloent-hi els conceptes de referències fortes i febles, i com ARC gestiona automàticament la memòria dels objectes. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos. Amb ARC, la gestió de memòria es simplifica significativament, permetent als desenvolupadors centrar-se més en la lògica de l'aplicació i menys en la gestió manual de la memòria.
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
