0

デリゲートによる関数の呼び出しまたはインスタンスの作成による関数の呼び出しとメソッドの呼び出しの違いは何ですか。

たとえば、次の方法を使用できます

ViewC1.m

-(void) doSomthing{
}


viewC2.m

viewC1 *myInterface = [[viewC1 alloc] init];
[myInterface doSomthing];

またはプロトコルでデリゲートを作成します...そして次のように使用します:

viewC2.m

[self.delegate doSomthing];
4

2 に答える 2

0

それは主に、達成しようとしているデザイン パターンの問題です。委譲を使用すると、クラス間のあまり明示的でないリンケージを作成できます。Apple のThe Objective-C Programming Languageから:

「プロトコルはメソッド宣言をクラス階層への依存から解放するため、クラスやカテゴリでは使用できない方法で使用できます。プロトコルには、どこかに実装されている (または実装されている可能性がある) メソッドがリストされていますが、それらを実装するクラスのアイデンティティはありません。興味。"

self.delegateしたがって、あなたの質問に答えるために、存在し、実装doSomthingし、viewC1インスタンスが実装する限り、結果に基づいた違いはありませんdoSomthing。しかし、より広い文脈を知らなければ、相対的な利点についてこれ以上語ることは困難です。私は、Objective-C プロトコルと、Cocoa フレームワークで頻繁に使用されているデリゲート パターンについて調べて、このパターンをいつ使用するかについてより良い感触を得ました。この場合、Apple のリードに従ってください。

(ちなみに、Objective-Cでは「関数」ではなく「メソッド」です…)

于 2012-10-06T10:41:43.947 に答える
0

ViewC1 と ViewC2 の 2 つのクラスがあるとします。ViewC1 から ViewC2 にメッセージを送信し、ViewC2 から ViewC1 にコールバック メッセージを受信する場合。このオブジェクトの通信にはプロトコルを使用することをお勧めします。このオブジェクト通信にインスタンス メソッドを使用する場合、ViewC2 は指定されたオブジェクト (この場合は ViewC1) でコールバックするように制限されます。ViewC2 が任意のオブジェクトをコールバックできるようにするため。ViewC2 でプロトコルを定義できます。そして、コールバックを受け取りたい他のオブジェクトにそれを適合させます。

于 2012-10-06T11:15:19.990 に答える