でウィンドウを保持することもCFRetain、 を使用することもできNSGarbageCollectorますdisableCollectorForPointer:。ただし、メモリ リークは簡単に発生する可能性があります。ウィンドウを閉じるために使用するアクションが、ウィンドウも解放することを確認してください。
close アクションにsender渡された が から継承されてNSViewいるwindow場合、ウィンドウへのポインターを取得するために使用できるプロパティがあります。
ただし、これは Cocoa が機能するように設計された方法ではありません。Hillegaas の本の第 12 章で、彼は次のように述べています。
showWindow: が初めて送信されると、NSWindowController は自動的に nib ファイルをロードし、ウィンドウを画面上で前面に移動します。nib ファイルは一度だけロードされます。ユーザーが [ウィンドウ] を閉じると、ウィンドウは画面外に移動しますが、割り当ては解除されません。次にユーザーが [window] を要求すると、単に画面上で移動されます。
[バージョン情報] ウィンドウの割り当てを解除すると、アプリがクラッシュするか、2 回目に開いたときに応答しないように見えます。
編集: 別の方法 (ただし、nib をロードする練習にはなりません) は、About ウィンドウと NSWindowController をメイン nib に追加することです (About ウィンドウの "Visible At Launch" 属性のチェックを外してください)。これは Main.nib を混乱させますが、完全に Interface Builder で行うことができます。接続:
- About コントローラのウィンドウ アウトレットから About ウィンドウへ
showWindow:About メニュー項目へのAbout コントローラーのアクション
- バージョン情報ウィンドウに独自の閉じるボタンがある場合は、それをウィンドウの
performClose:アクションに接続します。
このコースがどれほどお勧めかについて、Apple は次のように述べています。
非常に単純なアプリケーションでは、すべてのユーザー インターフェイス コンポーネントを 1 つの nib ファイルに格納できる場合がありますが、ほとんどのアプリケーションでは、コンポーネントを複数の nib ファイルに分散する方が適切です。小さな nib ファイルを作成すると、すぐに必要なインターフェイスの部分だけをロードできます。nib ファイルが小さいほど、アプリケーションのパフォーマンスが向上します。また、問題を探す場所が少なくなるため、発生する可能性のある問題のデバッグが容易になります。