<p>Is there a way to be sure we hold a useable reference to an object i.e. being sure it has not been already freed leaving that non nil reference dangling.</p>

Unfortunately there is no way to 100% guarantee that a pointer to anything is still valid, except by meticolously writing the correct code.