何时使用类似(id <uisearchbardelegate>)self?</uisearchbardelegate>

时间:2014-01-28 14:17:05

标签: ios objective-c delegates

我在我正在使用的某些代码区域中看到了这一点。

searchBar.delegate = (id<UISearchBarDelegate>)self;

我的问题是......

为什么不通过在类的接口中添加UISearchBar来使当前类成为<UISearchBarDelegate>的委托?

上述代码是否比将该类作为委托更好?

这两种方式对我有用,但我想了解为什么我可能想要使用另一种方式。

2 个答案:

答案 0 :(得分:6)

演员方法可以被视为作弊。如果委托类不想公开声明协议一致性(但为什么它被公开设置为委托),则会使用它。或者,如果委托类没有实现所有必需的方法,那么声明协议一致性将导致警告。

通常,更好的方法是声明协议一致性(公开(.h)或私有(.m))。

答案 1 :(得分:1)

如果您没有使用.h中的UISearchBarDelegate

@interface ScaryBugData < UISearchBarDelegate>

@property (strong) UISearchBar * searchBar;
@end

然后在您的.m文件中,您必须执行以下操作以使警告静音

searchBar.delegate = (id<UISearchBarDelegate>)self;