このコードに相当する非自動リリースは何ですか?
NSString *nsFName = [[NSBundle mainBundle] pathForResource:nsName ofType:nsExt inDirectory:nsPath];
このコードに相当する非自動リリースは何ですか?
NSString *nsFName = [[NSBundle mainBundle] pathForResource:nsName ofType:nsExt inDirectory:nsPath];
1つもありません。Cocoa を使用している場合は、プールを配置する必要があります。
Cocoa は、利用可能な自動解放プールがあることを常に期待しています。プールが使用できない場合、自動解放されたオブジェクトは解放されず、アプリケーションでメモリ リークが発生します。プールが利用できないときに自動解放メッセージを送信すると、Cocoa は適切なエラー メッセージをログに記録します。
GUI アプリケーションのセットアップ プロセスの一部は、メイン スレッドでの確立です。非 GUI プログラムも作成する必要があります。
独自のスレッドを作成している場合は、それらのスレッドごとに自動解放プールも作成して管理する必要があります。
Objective-C フレームワークでリンクするアプリケーションは、通常、各スレッドに少なくとも 1 つの自動解放プールを作成する必要があります。アプリケーションがオブジェクトの保持と解放を処理するマネージ モデルを使用する場合、自動解放プールは、そのスレッドから自動解放されたすべてのオブジェクトをキャッチします。
他に何をしているかによっては、CoreFoundation を使用できる場合があります。CFBundle
が構築されている CFType がありNSBundle
ます。CFBundleCopyResourceURL()
必要なことを実行できる機能があります。すべてのコードを Core Foundation に変換できる場合は、プールを使用して回避できますが、Ken が言うように、実際には、あなたが思っているような負担ではありません。pathForResource:ofType:
とにかく使用するたびに、おそらくディスクを叩いているでしょう。