One thing to bear in mind. Say for whatever reason you alias an object i.e. you make a variable that points at it. If you null that variable, the object still exists until you null the original variable e.g.
MyObject = TImage a:TImage = MyObject 'alias a = null 'it's not freed yet MyObject = null 'it is freed now