... it seems somewhat "dangerous". Since the "obj" parameter is typecasted to a pointer and then set to nil BEFORE calling Free on itself, doesn't this make it possible that it won't even exist when it goes to call Free?
1-obj is a pointer, casting it to a pointer type gives access to read or set its value.
2-Setting its value to nil before calling Free is exactly the point of using this procedure.
3-The memory the class occupies, which obj used to point to, is still reserved and will not be returned without a call to Free.
4-You are right, it should be called NilThenFree or FreeAfterNil.