@optional
デリゲートのメソッドを次のようにラッピングすることに慣れました。
if ([self.delegate respondsToSelector:@selector(method:)]) {
[self.delegate method:obj];
}
それはうまく機能しますが、デリゲートのメソッドがたくさんある場合、respondToSelector:
コードを複製しているように見えます...
ある時点で、私はrespondsToSelector:
別の方法に入れました:
//ignore warning
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- (void)performDelegateSelector:(SEL)selector withObject:(id)obj {
if ([self.delegate respondsToSelector:selector]) {
[self.delegate performSelector:selector withObject:obj];
}
}
その結果、respondToSelector: チェックは 1 つしかありませんが、まだ十分に改善されているようには見えません。
[self performDelegateSelector:@selector(method:) withObject:self];
どう思いますか?いくつかのヘルパーまたはカテゴリを使用してすべてのデリゲートのメソッドの送信をラップすることは理にかなっています@optional
か?それとも改善すべきではないことですか?