1

愚かな投稿で申し訳ありませんが、Objective-CプログラミングとCocoaは初めてで、答えが見つからない質問がいくつかあります。誰かが私を教えてくれることを願っています。

まず、XCodeで、Interface Builderを使用しているときに、新しいオブジェクトを作成するときに、オブジェクトを「アセット」にドラッグします。ただし、新しいクラスファイルを手動で作成しないと、メソッドなどを指定できません。Interface Builderの「オブジェクト」を使用する意味はありますか?

テスト用に作成した最初のアプリで、ほとんどのコードをAppDelegateクラスファイルに配置しました。調査によると、AppDelegateの目的は、起動や終了などのアプリケーションイベントを処理することだけです。このクラスにメソッドを入れるのは間違っていましたか?違いはありますか?

最後に、複数のクラスファイルを作成し、それぞれがクラスに構築およびリンクされたインターフェイスを使用して独自の機能を処理する場合、「メイン」ファイルをどのように処理しますか?'main'ファイルと'appdelegate'クラスファイルは、ほとんどの場合、そのままにしておくように思われますか?

それが理にかなっていることを願っています。繰り返しになりますが、ばかげた質問をしてすみませんが、答えが見つかりません。

みなさん、よろしくお願いします!

4

3 に答える 3

2

まず、XCode では、Interface ビルダーを使用するときに、新しいオブジェクトを作成するときに、オブジェクトを「資産」にドラッグします。ただし、新しいクラス ファイルを手動で作成しない限り、メソッドなどを指定することはできません。

できますよ。インスペクタを使用してオブジェクトのクラスを設定するだけです。

nib オブジェクトをアウトレットまたはアクションにのみ接続できることに注意してください。ランダムなメソッドを指定することはできませんし、そうすべきではありません。キーワードIBOutletIBOutletCollection、およびの要点は、IBActionこれらのプロパティ/メソッドが nib によって使用されることをコードで宣言することです。

インターフェイスビルダーの「オブジェクト」を使用する意味はありますか?

はい、しかしめったにありません。通常、コードでオブジェクトを作成し、アウトレットをそれらに接続します。

アプリケーションのデリゲートは、アプリケーションをそのように構築する場合、MainMenu または MainWindow nib で作成したいオブジェクトの 1 つです (iOS テンプレートは何らかの理由でそれから離れて変更されています)。

テスト用に作成した最初のアプリで、ほとんどのコードを AppDelegate クラス ファイルに入れました。調査によると、AppDelegate の目的は単に起動や終了などのアプリケーション イベントを処理することです。このクラスにメソッドを入れるのは間違っていましたか?

おそらく。アプリケーションのデリゲートは、通常、NS/UIApplicationDelegateプロトコルに関連するビジネスのみを処理する必要があります。

反対に、ルート ビュー コントローラーをアプリケーションのデリゲートにすることが理にかなっている場合は問題ありません (また、NS/UIApplicationDelegate実装コードがそれほど大きくない場合)。あなたが答えなければならない質問 (そして、あなたのアプリケーションについて答えることができるのはあなただけです) は、ルート ビュー コントローラーをアプリケーションのデリゲートにするのか、それともアプリケーションのデリゲートをルート ビュー コントローラーにするのかということです。疑わしい場合は、それらを別々に保管してください。

違いはありますか?

長期的には、はい。特にアプリケーションのデリゲートのクラスでは、Big Ball of Mudクラスを作成するのは非常に簡単です。これは、明確に定義され明確に線引きされた責任を持たないクラスです。できるだけ早くダイナマイトをそのようなクラスに持って行きます。

最後に、複数のクラス ファイルを作成し、それぞれが構築されてクラスにリンクされたインターフェイスを使用して独自の機能を処理する場合、「メイン」ファイルはどうすればよいでしょうか。ほとんどの場合、「メイン」ファイルと「appdelegate」クラス ファイルはそのまま残されるように思われます。

はい。それらはボイラープレートです。

アプリケーションのデリゲートにコードをまったく記述していない場合 (または、そこに記述したものをすべて削除して、新しいより明確なクラスにした場合)、残っているのは空のメソッド本体だけであるか、まったくない場合は、アプリケーションのデリゲートを安全に削除できます。デリゲート。気が変わったら、後でいつでも再作成できます。

アプリケーション デリゲート クラスを削除する場合は、main.m ファイル (または MainMenu/MainWindow nib (ある場合)) も参照しないように変更する必要があることに注意してください。呼び出し (またはその他のコード) が存在しないクラスを参照している場合、アプリケーションはビルドされずUIApplicationMain、MainMenu/MainWindow nib (またはその他の nib) が存在しないクラスを参照している場合はクラッシュします。 .

デリゲートが必要な場合は、アプリケーションでデリゲートを使用することは恥ずべきことではありませんが、不要な場合はデリゲートとデリゲートに使用していたクラスを削除することで、コードをそこに詰め込んだり、3 次グローバルを格納するために使用したりする将来の誘惑を排除できます。

于 2012-04-15T23:32:12.000 に答える
1

正直に言うと、別のオブジェクトにいくつかの UI バインディングを持たせたいときに、IB でオブジェクトを使用したのは 1 回だけです。

アプリのデリゲートとメイン ファイルについては、ほとんどの場合、そのままにしておきます。しかし、アプリのテスト以外のことをしようとすると、たとえば、サーバーに接続する、ユーザーにレビューを依頼する、起動カウンターをインクリメントするなどのオープン イベントを処理する必要があります。これらは単なる例です。

メインファイルはそのままにして、提供されているオブジェクト指向ツールを使用することをお勧めします。ビュー コントローラー階層を作成し、ビューをデータから分離し、ビュー コントローラーを使用してビューとモデルの間で通信する必要があります。アプリケーションの編成方法について詳しく知りたい場合は、 MVCについてお読みください。

于 2012-04-15T01:09:01.840 に答える