[NSString StringWithFormat]を使用して文字列を作成する場合、それを[保持]する必要がありますか?私の理解では、便利なメソッドはオブジェクトを自動解放プールに追加します。その場合、イベントループの最後にプールで排出されないように、オブジェクトを保持する必要がありますか?
1 に答える
文字列が現在の関数を超えて存続する必要がある場合は、はい、それを必要とするオブジェクトは文字列を保持する必要があります。これは、英語の言い回しが些細なことのように見えますが、実際には重要な概念を隠している場所の1つです。「私はそれを保持する必要がありますか?」と言うのではなく または(私が最初に書いたように)「文字列を保持したい場合」は、文字列を保持するオブジェクトの観点から話します。違いは、後者が所有権の概念を表現していることです(注:Appleのドキュメントでは、所有権について話すときに「あなた」を使用していますが、それは二人称の「あなた」ではなく、三人称の避妊去勢手術「あなた」です)。もちろん、文字列をプロパティに格納している場合、その後、保持(またはコピー)が自動的に処理されます。古いバージョンのOSX(10.4以前)をターゲットにする必要がない限り、通常はプロパティを使用する必要があります。
標準コレクションは、それらに含まれるオブジェクトを所有しているため、それらを保持します。要素がコレクションから削除されると、コレクションは要素を解放します(注:自動解放されないため、オブジェクトに他の所有者がいない場合、オブジェクトは破棄されます)。このトピックの詳細については、「共有オブジェクトの有効性」を参照してください。Appleのメモリ管理ドキュメントには、知っておく必要のあるすべての情報が記載されているはずです。