2010-07-23 8 views
8

Heredé una aplicación de iPhone en el trabajo y soy nuevo en Objective-C, así que todavía no me identifico. Encontré un código similar a este:¿Debería -dealloc hacer algo más que liberar memoria?

- (void) dealloc { 
    [[StaticObject sharedObject] showSomeDialog]; 

    [super dealloc]; 
} 

Sé que esto está mal visto en otros idiomas. Mi sentido araña se está volviendo loco mirando ese código.

¿Es este un lenguaje común de Objective-C? ¿O tengo una base de código maliciosa para arreglar?

Respuesta

7

No debe poner el código de UI en -dealloc. Regla general, solo use -dealloc para limpiar lo que ha hecho: liberar objetos, eliminar observadores, etc.

Considere qué pasaría si este objeto viviera en un hilo que no sea el hilo principal ... ahora Tendría código de UI ejecutándose en el hilo no principal, que es Lo malo.

+4

Versión corta: "Sí, es posible que tenga una base de código maliciosa para corregir". ;-) –

+1

Es bueno ver que mi intuición está confirmada. – ageektrapped

0

Puede hacerlo por algunas razones de depuración. ¡Pero no creo que debas hacer algo como esto! Esto significa que se solicita un diálogo cuando se desasigna un objeto. Por lo tanto, si necesita algún mecanismo para mostrar un diálogo en un momento determinado, no lo haga depende de que se desasigne un objeto. En el método dealloc realmente debería liberar todos los objetos retenidos por el objeto desasignado. Y no haciendo algunas características de aplicación elegantes.

Cuestiones relacionadas