releaseが必要なとき
Objective Cは2.0になってガベージコレクションが追加されましたが、iPhoneでは使うことができません。ですので明示的にオブジェクトを解放をしてやる必要があります。
オブジェクトをinitで初期化したら、そのオブジェクトが不要になった時は忘れずにreleaseしましょうってことですね。
私がハマってしまったことはinitで初期化したわけではないけど、初期化したんだから解放しなきゃと思い、不必要なreleaseをしてしまったことです。
例えばこのように。
NSString* str;
str = [[NSString stringWithCString:"hoge"];
[str release]; // これはNG
これはstringWithCStringで初期化しているのでautoreleaseが呼ばれているので明示的にreleaseしてはいけません。
する必要がない、ではなく、してはならないです。