6

背景: Xcode 4.2までは、いずれかのテンプレートを使用して作成された新しいプロジェクトにはMainWindow.xibが含まれるため、UIApplicationMain()の4番目の引数としてnilを渡します。Xcode 4.2以降、すべてのテンプレートは、クラス文字列を4番目の引数として渡すことによってアプリケーションデリゲートをインスタンス化し、xibでアプリケーションのウィンドウを構築しません。

4.2でこの設定を行うのは簡単で、もちろん期待どおりに機能します。ファイルの所有者をUIApplicationに設定するxibを作成し、デリゲートを接続し、Info.plistで指定し、main()で4番目の引数を指定します。

質問: Appleがアプリケーションデリゲートをインスタンス化し、「古い方法」ではなくコードでUIWindowを構築することを推奨しているのはなぜですか?メリットは何ですか?

考慮事項: UIを管理する方法としてストーリーボードを使用することを選択した場合、この新しいテンプレートの動作を期待しますが、[ストーリーボードを使用する]をオフにすると、古いpass-nil-and-use-MainWindow.xibテンプレートを期待します。

この質問はここで回りくどい方法で尋ねられましたが、答えは議論に少し薄いです。

4

1 に答える 1

7

あなたはなぜAppleが何かをしているのかと尋ねているのですか?Appleが明確に発言していない限り、決定的な答えはあり得ない。

個人的には、新しいアプローチはかなりエレガントで、透明で、防弾だと思います。当然のことながら、古いアプローチでは、メインのペン先はInfo.plist設定に応じてランタイムによって自動的に読み込まれ、その他のすべての処理はペン先を介して行われました。特に、アプリデリゲートとウィンドウのインスタンス化と関連する配線(アプリデリゲートをアプリケーションデリゲートにする必要があり、ウィンドウをアプリデリゲートのウィンドウにする必要があります)。ただし、インターフェイスの最終的な表示のためにアプリデリゲートのコードに戻ります。

これは理解するのが困難でした。私の本でそれを説明するのにかなりの言い回しが必要でした。壊れやすかったです。ペン先はアプリデリゲートクラスの名前を知っている必要があるため、デフォルトで作成された面白い長い名前が気に入らない場合は、変更したときにすべてを簡単に台無しにする可能性があります。

ただし、現在、アプリデリゲートは単にApp Delegateという名前であり、正しく言うように、UIApplicationMain()によってコードでインスタンス化されます。その他はすべて、直接の後続としてコード実行されます。アプリデリゲートがインスタンス化され、didFinishLaunchingが呼び出されます。次に、コードでウィンドウを作成し、コードでプロパティに割り当て、コードにニブがある場合はニブをロードします。 、ウィンドウのrootViewControllerをコードで設定し、前と同じようにインターフェイスをコードで表示します。

したがって、ブートストラップはすべてコードであるため、直接表示されます。これにより、何も壊すことなく、理解と変更が容易になります。以前は、テンプレートデザイナーが、舞台裏で魔法のように自動的に発生させることができるものの量を誇示していたようです。今では、すべてがオープンに、明示的に行われます。

于 2011-10-25T18:46:01.940 に答える