Очень важно, где был определён Obj. Если это поле формы, то оно при создании формы получает значение nil. Если это локальная переменная функции / процедуры, то там мусор и перед созданием объекта надо эту ссылку инициализировать:
Код:
Obj:= nil;
Obj:= <тип>.Create();
(прочитайте справку по Delphi. Компилятор инициализирует поля сложных типов (record, class) и глобальные переменные. Локальные переменные функций всегда содержат мусор.)
Если объект уничтожается, но ссылка будет повторно использоваться, то после уничтожения объекта надо принудительно её привести к nil:
Есть хороший совет вместо Free использовать только FreeAndNil.
А ваши варианты тогда будут работать. (Я использую Assigned).