-1

次のリンクに同様の質問がありますが、 私の質問にはまったく答えていません。

Facebook のヘルパー クラスを設定しています (委任パターンに従います)。クラス メソッドの 1 つの例は次のようになります。

+ (void)openSession:(id)delegate;

openActiveSessionWithReadPermissionsこのメソッドは、 completedHandler ブロックを期待するFacebook メソッドを呼び出します。sessionStateChanged次のようにブロック内でデリゲート メソッドを呼び出すことは理にかなっていますか?

[delegate sessionStateChanged];

または、Facebook ヘルパー クラスのインスタンス メソッドを使用[self.delegate sessionStateChanged]し、completionHandler ブロックを使用してデリゲートを呼び出す方がよいでしょうか。

4

2 に答える 2

1

単一のコールバックのみの場合は、パラメーターとしてデリゲートではなく、ブロックパラメーターを使用することをお勧めします。

+ (void)openSession:(void (^)(void))sessionStateChangedBlock

そうすれば、デリゲートプロトコルの定義について心配する必要はありません。

デリゲートを使用する場合は、クラスレベルでデリゲート変数を定義する必要があります。[self.delegate sessionStateChanged]デリゲートをクラス変数として保存しているため、使用できません。selfクラスのインスタンスでのみ使用できます。

于 2013-02-08T18:58:25.343 に答える
0

クラスメソッドとインスタンスメソッドを使用して、両方のメソッドを試しました。適切な委譲パターンに従うには、インスタンス メソッドを使用する方が適切だと思いますが、それらのどれでも構いません。

于 2013-02-14T07:53:53.027 に答える