プロパティがretain
であるかどうかによって異なります。ほとんどのオブジェクトのプロパティは保持されます。これは、保持プロパティが次のようになります。
- (void)setBlueViewController:(BlueViewController *)bvc {
if (bvc != blueViewController) { // blueViewController is local ivar
[blueViewController release];
blueViewController = [bvc retain];
}
}
したがって、あなたは+ 2の保持カウントを作成しています。 init
のときは+1です。プロパティはretain
です。それを+2まで上げてください。あなたのdealloc
がそれを一度解放すると+1になります...あなたはその財産を漏らしました。変数がalloc
/init
であるため、セッターを使用したくありません。代わりに、インスタンス変数に直接代入してください。
これを直接インスタンス化することで、他のコード行のエラーを減らすことができます。release
例えば、あなたは大量のクラスを保持しているので、事故でretain
をタイプしてプログラムがクラッシュするまでそれを認識できませんでした。
もちろん、Calebは自動解放できると言っていますが、実行ループが終了するまでメモリに保存します。それははるかに簡単で、あなたはそれを心配することなく、より多くのコントロールを提供します。 ivarにalloc
/init
を割り当てることには何も問題ありません。実際、それはそれを行う最善の方法です。