¿Se invoca siempre viewDidUnload y dealloc cuando se destruye un UIViewController?

Me gustaría saber si ambos, viewDidUnload y dealloc siempre se dealloc sucesivamente en el process de desassembly de UIViewController. ¿Es posible que se pueda llamar a dealloc en mi controller de vista sin que se haya llamado a viewDidUnload primero?

En cualquier caso, si estoy liberando de forma segura las properties y conservo las references en ambos methods, no sería un problema si se llamaran ambos methods, pero me preguntaba si alguien sabía con certeza o podría arrojar algo de luz sobre el desgarro process.

Actualización 2012: Es útil tener en count que como si iOS 6 viewDidUnload hubiera quedado en desuso y debería replacese con la vista manual si se requiere en didReceiveMemoryWarning .

Un buen artículo sobre el nuevo UIView / UIViewContoller y el nuevo comportamiento y sus efectos en el blog de joe conway

viewDidUnload no se llamará todas las veces como método dealloc . viewDidUnload se llama solo cuando su aplicación recibe una advertencia de memory baja.

Solo piense, si está liberando su object tanto en los methods viewDidUnload como en el dealloc . Si ambos se llaman cada vez, entonces se libera el object ya liberado, lo que provocará la caída de la aplicación, ¿no es así ?. viewDidUnload es un lugar proporcionado por Apple para limpiar las cosas cuando se recibe la advertencia de poca memory porque sabes que en iPhone tenemos restricciones de memory.

Es muy reflexivo que, el método viewDidiUnload recibe solo llamadas cuando aparece la advertencia de memory. Una buena práctica sería liberar el requisito del object dentro de este método y también hacer que el object sea nulo.