Objective-C のメモリ管理に関するチュートリアルを学習しましたが、その仕組みは理解できたと思います。しかし、なぜ autorelease-pools がそのように機能するように作成されたのか疑問に思います。私が理解している限り、autorelease メッセージは、関数からオブジェクトを返すときに主に使用されます。これは、呼び出し先が呼び出し元が実際に結果を変数に格納するかどうかを確認できないためです (後で返されたオブジェクトを解放するために必要になります)。この概念は、Objective-C が単なるプリプロセッサだった時代に作られたという説があります。代わりに、コンパイラは割り当てられていない戻り値を認識し、返されたオブジェクトの解放をサイレントに自動挿入できます (この動作は、割り当てられたすべての戻り値を手動で解放する必要があることを意味します)。
だから私の質問:
- 私の理論は正しいですか、それとも自動解放プールの概念には他の理由がありますか
- 保持/解放ベースの手動メモリ管理の戻り値の問題に対処するための他の概念はありますか(必ずしもObjective-C固有ではありません)