0

2つのクラスAとBがあります。クラスAは、クラスBにターゲット/アクションのペアを与え、クラスBは後でコールバックします。ターゲットはself(=クラスA)、アクションはコールバックメソッドです。コールバックは後で行われます:

[target performSelector:action withObject:anObject];

メソッドアクションは、このコールバックによってのみ呼び出されます。クラスAの.hファイルでメソッドを宣言しなくても問題なく動作します。しかし、私の質問は、.hファイルでメソッドを宣言しないのは悪い設計ですか?メソッドはコールバックでのみ呼び出されるので、宣言する必要はないと思いますね。つまり、コールバック「performSelector」は、実行時にメソッドが存在するかどうかを確認することさえできません。それで、あなたの提案は何ですか?

4

2 に答える 2

4

宣言する必要はないと思いますよね?

いいえ、そうではありません。私はこのパターンをよく目にしますが、実際、これらのコールバック/デリゲートのみのメソッドを宣言していません。

つまり、コールバック「performSelector」は、実行時にメソッドが存在するかどうかを確認することさえできません。

しかし、そうです、反省のおかげで、それは可能です。次のように書いてください。

if ([delegate respondsToSelector:@selector(someCallback:)]) {
    [delegate someCallback:self];
}

しかし、これについて本当に心配している場合は、デリゲートの代わりに単純なコールバックにブロックを使用する方がよいでしょう。

于 2012-10-11T08:06:37.850 に答える
1

から公開アクセスされているため、わかりやすくするために宣言します.h(必須ではありませんが)B

于 2012-10-11T08:06:13.247 に答える