He cambiado mi proyecto a ARC, y no entiendo si tengo que usar strong
o weak
para IBOutlet. Xcode hacer esto: en el constructor de interfaces, si un crear un UILabel
por ejemplo, y lo conecto con el asistente editor para mi ViewController
, que crean esto:débil o fuerte para IBOutlet y otros
@property (nonatomic, strong) UILabel *aLabel;
Utiliza el strong
, en vez leí un tutorial en el sitio web RayWenderlich que dicen esto:
Pero para estas dos propiedades en particular, tengo otros planes. En lugar de
strong
, los declararemos comoweak
.
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet UISearchBar *searchBar;
Weak
es la relación recomendada para todos los propiedades de salida. Estos objetos de vista ya forman parte de la jerarquía de vista del controlador de vista y no es necesario que se conserven en otro lugar. La gran ventaja de de declarar sus salidasweak
es que le ahorra tiempo escribir el método viewDidUnload.Actualmente nuestra
viewDidUnload
se parece a esto:
- (void)viewDidUnload
{
[super viewDidUnload];
self.tableView = nil;
self.searchBar = nil;
soundEffect = nil;
}
Ahora puede simplificar a la siguiente:
- (void)viewDidUnload
{
[super viewDidUnload];
soundEffect = nil;
}
Así que utilice weak
, en lugar de la strong
, y elimine el conjunto a cero en el videDidUnload
, en lugar de e strong
, y use self... = nil
en el viewDidUnload
.
Mi pregunta es: cuándo tengo que usar strong
, y cuándo weak
? También quiero usar para el destino de despliegue iOS 4, entonces ¿cuándo debo usar el unsafe_unretain
? ¿Alguien puede ayudarme a explicarme bien con un pequeño tutorial, cuando use strong
, weak
y unsafe_unretain
con ARC?
gracias por la respuesta – Piero
dices eso, para iboutlet si uso fuerte tengo que usar nil en viewdidunload, y para poca memoria no tengo fugas, en cambio con weak no tengo que usar nil en videwdidunlaod, y para poca memoria advirtiendo que es mejor la solución fuerte o la débil? – Piero
Es lo mismo. Usar 'weak' le permite ahorrar tiempo escribiendo código (dos líneas en su caso) a mano. Pero, Xcode lo hace por ti. Mi opinión personal. Me gusta usar 'fuerte'. –