(NSImageViewに画像をロードできるようにパスを取得したい)
そのために実行可能ファイルへのパスは必要ありません。最も簡単な方法はNSImage のimageNamed:メソッドです。2 番目に簡単なのは、St3fan が提案したものです。
それでは、難しい方法の実装における問題を見ていきましょう。
NSString * _Ruta_APP = [[NSString alloc] init];
これは、という名前のローカル変数を宣言し、_Ruta_APPそれを初期化して NSString オブジェクトを保持します。このオブジェクトは、作成してalloc解放していないため所有しています。
_Ruta_APP = [[NSBundle mainBundle] bundlePath];
これにより、別の文字列オブジェクトが同じ変数に入れられ、最初のオブジェクトが置き換えられます。ガベージ コレクションを使用していない場合、メッセージを送信する方法がなくなったとしても、最初のオブジェクトはまだ生きていて、まだ所有しています。したがって、あなたはそれを漏らしました。
_Ruta_APPインスタンス変数として使用する場合は、最初の行全体をカットします。通常、所有していないオブジェクトをインスタンス変数に保持することはお勧めできません。そのため、このオブジェクトの所有権を取得してください。最善の方法は、コピーを作成し (作成後、コピーを所有することになります)、それをインスタンス変数に入れることです。そうしないと、元のオブジェクトの所有者がそれを解放すると、オブジェクトは消滅しますが、あなたはそれを保持したままになります。次に、デッド オブジェクトにメッセージを送信すると、アプリがクラッシュします。メモリ管理規則を参照してください。
_Ruta_APP他のインスタンス メソッドではなく、ローカル変数として使用する場合は、インスタンス変数を切り取ります。