3

main()を作成し、プログラムが終了する前にそれを排出する場合NSAutoreleasePool、メモリリークを防ぐことができますが、とにかくプロセス全体のメモリスペースが次に解放されます。次に解放されますか?実際、小さな部分で作業を続けると、プログラムの終了が遅くなるのではないでしょうか。

drainを呼び出すことができrelease、次にを呼び出すことができますが、メモリを解放するだけで、他には何もしない場合(ファイルを閉じるなど)、メモリを解放するのdeallocに役立ちません)deallocdrain

4

2 に答える 2

5

環境に頼らず、可能な限り自分で後片付けをすることをお勧めします。メモリの使用量だけを心配している場合は、いいえ、最上位のプールは厳密には必要ありませんが、考慮する必要があるのそれだけではありません。オブジェクトは、そのメソッドでメモリを解放する以外のことを行う場合があり-deallocます (たとえば、ファイルをディスクにフラッシュしたり、希少な OS リソースを解放したり、プロセスの終了時にシステムに返されないリソースを解放したりします)。

プールが存在しない状態でオブジェクトが自動解放された場合のコンソール スパムは言うまでもありません。

于 2012-05-13T20:10:07.373 に答える
4

GUIプログラムのプログラム終了中は、deallocは呼び出されません。シャットダウンが遅くなるのを避けるために、特別な場合としてバイパスされます。これは、呼び出されることに依存している場合に重要です。dealloc呼び出されるという約束はないからです。

最上位の自動解放プールがあるので、システムは自動解放プールが欠落しているスレッドに対して確実に警告を出すことができます(そしてJonathanは指摘します)。GUIプログラムで実際に消耗することはありません。コマンドラインプログラムでドレインされ、プログラムの完了が遅くなる可能性がありますが、それは一般的に大きな問題ではありません。コマンドラインアプリにある場合はexit()、自動解放プールドレインの前を移動できます。

于 2012-05-13T20:15:57.903 に答える