releaseが必要なとき

Objective Cは2.0になってガベージコレクションが追加されましたが、iPhoneでは使うことができません。ですので明示的にオブジェクトを解放をしてやる必要があります。
オブジェクトをinitで初期化したら、そのオブジェクトが不要になった時は忘れずにreleaseしましょうってことですね。
私がハマってしまったことはinitで初期化したわけではないけど、初期化したんだから解放しなきゃと思い、不必要なreleaseをしてしまったことです。

例えばこのように。

NSString* str;
str = [[NSString stringWithCString:"hoge"];
[str release]; // これはNG

これはstringWithCStringで初期化しているのでautoreleaseが呼ばれているので明示的にreleaseしてはいけません。
する必要がない、ではなく、してはならないです。