0

親について知る必要があるカスタムUIViewクラス(別の異なるカスタムUIViewクラス)があります。

  1. 親クラスは子クラスのヘッダーをインポートする必要があるため、そのクラスのサブビューを追加できます。
  2. 子クラスは親クラスのヘッダーをインポートする必要があるため、そのメソッドとプロパティにアクセスできます。子の親をインスタンス変数にする必要があるため、.mではなく.hファイルでインポートを実行する必要があります。
  3. これを行うと、循環インポートの問題が発生します。

誰かがこれを理解できるなら、あなたはこれを解決するのを手伝ってもらえますか?ありがとう。

4

3 に答える 3

2

必要なものは、一般に前方宣言として知られています。

詳細については、 Objective-C:ForwardClassDeclarationを参照してください。

于 2013-01-10T01:36:15.687 に答える
0

これを解決する方法はたくさんあります。たとえば、他のクラスへの参照をIDとして宣言し、メッセージを転送する方法があります(Objective-Cでは、それらをキャストする必要はなく、コンパイラーはキャストしません。それについて文句を言う)。

例えば:

@property(nonatomic,weak) id child;

ただし、両方のクラスを処理するルートコントローラーを使用する方法で設計を確認することもできます。このように、AはBと直接話しませんし、BはAと直接話しません。代わりに、AがBと話したい場合は、Cと話し、CはBと話し、その逆も同様です。

于 2013-01-10T01:34:23.767 に答える
0

子のヘッダーファイルで前方宣言()と親()への弱参照を使用することもできますが、これは一般的に適切なプログラミング手法ではありません。@class ParentClass@property (nonatomic, weak) ParentClass *parent

これが一般的に良い考えではない理由:

1)プロジェクトが大きくなると、子が特定のクラスの親を必要とするため、DRY(「自分を繰り返さないでください」)に違反する可能性があります...後で別の親が同じ子オブジェクトを作成する必要がある場合はどうなりますか? ?新しい親の別のフォワードクラスを宣言し、それに弱いプロパティを持つ新しいクラスを作成する必要があります。

2)これもスパゲッティコードにつながる可能性があります...子供が使用しているメソッドに影響を与える新しい機能を親に追加したい場合はどうなりますか?少し異なる、新しいが類似したメソッドを作成しますか(DRYの違反についてはポイント1を参照)。元のメソッドへの入力を作成しますか(子がこの変更を認識し、適切な入力を渡すことも確認する必要があります)。

代わりに、ここではDelegationデザインパターンの方がうまく機能します。Appleはまた、ライブラリ全体でこれを頻繁に使用しています。たとえば、UITableViewデリゲートとデータソースを宣言して、UITableViewオブジェクトが親クラスの実装について知る必要なしに、アクション(セルのクリック)とデータ入力(カスタムセルの作成)を他の所有クラスに委任できるようにします。

一般的な委任パターンの詳細については、こちらのWikipediaを参照してください。

http://en.wikipedia.org/wiki/Delegation_pattern

独自の作成に関するチュートリアルprotocols(iOSでの委任の実装方法)については、次のチュートリアルを参照してください。

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/

委任やその他の必要なiOSの概念を含む、iOS全般に関する高品質のチュートリアルと紹介については、RayWenderlichのサイトも参照してください。

http://www.raywenderlich.com/

幸運を!

于 2013-01-10T01:56:19.480 に答える