freeandnil should set the variable holding the reference to the object to nil not the self "variable" of the object.
Yes, I wrote too hastily. I meant "if object destructor accesses Self indirectly".
For example, consider TForm.Destroy which calls "OnDestroy" event handler,
which might be written by another programmer and carelessly access "Form1.SomeProperty".
(Actual TForm.Destroy does not work so simply, it is just an example).