He visto una serie de publicaciones relacionadas con delegados, y me gustaría saber la forma adecuada de referenciarlas. Supongamos que tengo un objeto declarado como:Delegados: ¿retener o asignar liberación?
@interface MyViewController : UITableViewController {
id delegate;
}
@property (nonatomic, retain) id delegate;
@end
A través del ciclo de vida de MyViewController
, que hará que las llamadas a métodos de su delegado en respuesta a la interacción con el usuario.
Cuando llega el momento de deshacerse de una instancia de MyViewController
, hace el delegate
Ivar tiene por qué ser release
'ed en el método de la aplicación dealloc
ya que se declara con retain
?
O, por el contrario, ¿debería conservarse delegate
? Tal vez debería ser @property (nonatomic, assign) id delegate
? De acuerdo con Apple's docs:
conservan ... Normalmente, se utiliza este atributo para los tipos escalares tales como NSInteger y CGRect, o (en un entorno de referencia contado) para objetos que no posee tales como delegados.
Normalmente, me gustaría ir con lo que dicen los documentos, pero he visto un montón de código que llama al retain
en un delegado. ¿Es esto solo "código malo"? Aplaudo a los expertos aquí ... ¿Cuál es la forma correcta de manejar esto?