Question: My base class has properties that are used by a subclass. where should Release be called? In the original base class or the class that inherits it?

Answer: 
If the properties are only used by the subclass, they should be defined in the subclass (not the parent class) and the subclass should release them within it's -(void)dealloc function. You'd have something like this:

```
- (void)dealloc
{
   [username release];
   [password release];
   [super dealloc];
}

```

Note that we don't call dealloc on the properties! We just call "release" which signifies that we no longer will be using them and the system can clean them up (providing nobody else is using them).
Short answer: In the base class.

Long answer: Objects are "owned" by other objects. To own an object, you have to allocate or retain it (with retain, alloc, new, or copy). The owner is responsible for disposing of the memory with a release or autorelease. There should be one release/autorelease for every allocation/retain. 

It is Cocoa convention that only methods that begin with "new" and "copy" return objects that have been allocated/copied/retained but are not owned by the method's receiver. The owner is then the object that called the "new" or "copy" function.