5

私は Apple のMVCNetworking サンプル プロジェクトを見てきましたが、インターフェイス定義の一部がAppDelegate私を困惑させています。.h ファイルには次のものがあります。

@interface AppDelegate : NSObject
{
  ...

しかし、.m ファイルには次のように記述されています。

@interface AppDelegate () <SetupViewControllerDelegate>
  ...

したがって、このクラスは非公開でプロトコルに準拠しています。しかし、ヘッダーで公に宣言するのではなく、なぜこれを行う必要があるのでしょうか?

4

4 に答える 4

5

一般に、公開はできるだけ少なくする必要があります。AppDelegate が SetupViewController のデリゲートになることができるという事実は、おそらく AppDelegate が SetupViewController を提示するときに使用されます。他のクラスは、AppDelegate を他の SetupViewController のデリゲートとして設定するべきではないため、その準拠を公に宣伝することは意味がありません。

于 2011-11-22T20:47:41.523 に答える
3

実装は、SetupViewControllerその「プライベート」メソッドの 1 つで内部的に を使用しているようpresentSetupViewControllerAnimated:です。ビュー コントローラーは (プロパティなどを介して) パブリックにアクセスできないため、クラスがパブリックの観点からプロトコルに準拠していると宣言する必要はありません。つまり、プロトコルはクラスの実装のみに関連し、それが提示するパブリック インターフェイスには関連しません。

于 2011-11-22T20:45:20.993 に答える
0

おそらく、自分以外のプロトコルについて誰にも知られたくないからでしょう。したがって、AppDelegate の外部の誰かが Appdelegate のインスタンスをデリゲートとして別のクラス インスタンスに渡すことはありません。したがって、これを内部的に渡すことができます。

于 2011-11-22T20:49:19.060 に答える