I have code like this:

```
vector<SoundObject*> sounds ;

- (void) loadSound:(NSString*) name
  {
    SoundObject* so = [[[SoundObject alloc] init] load:name] ;
    if( so )
      sounds.push_back( so ) ;
  }

```

Ok, so I did a couple of things here (I may be very noob at this, just focus on *memory leaks*).

1. Should I call `[so retain]` before pushing `so` into the array?
2. **It is possible for `load` to fail, and if it does, it returns `nil`.**
	* If `load` did fail, *do I have to call `[self release]` before returning from `load`?*