objective libro herencia estructura entorno enlazador desarrollo clases objective-c ios xcode dealloc automatic-ref-counting

objective c - libro - Dealloc personalizado y ARC(Objective-C)



objective c or swift (1)

Cuando usa ARC, simplemente no llama a [super dealloc] explícitamente; el compilador lo maneja por usted (como se describe en el documento ARC LLVM ARC, capítulo 7.1.2 ):

- (void) dealloc { [observer unregisterObject:self]; // [super dealloc]; //(provided by the compiler) }

En mi pequeña aplicación para iPad tengo una función de "cambio de idioma" que utiliza un observador. Cada controlador de vista se registra con mi observador durante su viewDidLoad:

- (void)viewDidLoad { [super viewDidLoad]; [observer registerObject:self]; }

Cuando el usuario pulsa el botón "cambiar idioma", el nuevo idioma se almacena en mi modelo y se notifica al observador y llama a updateUi: selector en sus objetos registrados.

Esto funciona muy bien, excepto cuando tengo controladores de vista en un TabBarController. Esto se debe a que cuando la barra de pestañas se carga, recupera los iconos de pestañas de sus controladores secundarios sin inicializar las vistas, por lo que viewDidLoad: no se llama, por lo que esos controladores de vista no reciben notificaciones de cambio de idioma. Debido a esto, moví mi registerObject: llamadas al método init .

Cuando usé viewDidLoad: para registrarme con mi observador, usé viewDidUnload: para viewDidUnload: registro. Como ahora estoy registrándome en init , tiene mucho sentido dealloc registro en dealloc .

Pero éste es mi problema. Cuando yo escribo:

- (void) dealloc { [observer unregisterObject:self]; [super dealloc]; }

Me sale este error:

ARC prohíbe el envío explícito de mensajes de ''dealloc''

Ya que necesito llamar a [super dealloc] para asegurar que las superclases se limpien adecuadamente, pero ARC prohíbe eso, ahora estoy atascado. ¿Hay otra manera de informarme cuando mi objeto se está muriendo?