0

私はまだ Cocoa を使い始めたばかりで、メモリ管理についてあまり知りません。Apple のドキュメントを読みましたが、まだ混乱しています。- (void)dowhatever私の質問は、終了時に変数の値を設定した場合、変数dowhateverの内容は消去されますか? もしそうなら、変数の内容を保持するために使用できる(ファイルに書き込むことなく)方法はありますか?

助けてくれてありがとう

4

1 に答える 1

2

私の質問は- (void)dowhatever、ボイドが終了したときに変数の値をaに設定したかどうかです…</ p>

voidタイプです。始まりも終わりもありません。

dowhatever具体的には、メソッドの戻り型です。値dowhateverが返された場合、その戻り値のタイプはあなたが持っている場所になりますvoid。たとえば、- (NSUInteger) doWhatever。そこにあるということは、メソッドが値をvoid返さないことを意味します。

Objective-C2.0プログラミング言語のドキュメントも参照してください。

…変数の内容は消去されますか?

ローカル変数の場合、メソッドが戻ると変数は存在しなくなります。

インスタンス変数は、変数が含まれているインスタンス(オブジェクト)が存在する限り、つまり、インスタンスの割り当てが解除されるまで存在します。

インスタンス変数についても、Objective-Cのドキュメントで説明されています。

もしそうなら、変数の内容を保持するために使用できる(ファイルに書き込まない)メソッドはありますか?

オブジェクトを呼び出し元に返す必要があるだけの場合は、オブジェクトを保持して自動解放します。詳細については、Cocoaのメモリ管理プログラミングガイドを参照してください。

それがあなたがしていることではない場合、問題はあなたが生き続けるためにオブジェクトが必要な理由になります。

オブジェクトの観点から考える:オブジェクトは特定の他のオブジェクトを所有している可能性があり、所有しているすべてのオブジェクトのインスタンス変数を持っています*。所有権をまっすぐにしてコードで保持している限り、オブジェクトの存続期間は機能します。

オブジェクトAが別のオブジェクトBを必要とする場合、AはBを所有する必要があります。この所有権は排他的ではありません。Bを共有することはできますが、少なくともBを共有する必要があります。Bは、少なくとも1人の所有者がいる限り、存続します。

これについては、メモリ管理ガイドでも説明されています。オブジェクト間の関係の他の例については、 Cocoa Fundamentals Guide 、特にCocoaのデザインパターンの章をめくってください。サンプルコードを調べて、実際に示されているパターンを確認することをお勧めします。

*デリゲートなど、所有していないオブジェクトのインスタンス変数を持つこともできます。所有していないオブジェクトのインスタンス変数を持つことができますが、所有している場合は、そのオブジェクトのインスタンス変数が必要です。

于 2010-04-17T20:55:44.557 に答える