我正在审核我的一些代码,突然间我意识到一个UIViewController有UITableView
并且是datasource
的{{1}}和delegate
并未声明协议UITableView
,但只是简单地拥有方法但从未声明协议。
根据文档,这是如何工作的?
<UITableViewDataSource, UITableViewDelegate>
没有任何类型的警告,我当然有必要的方法来完成这项工作,一切运作完美,为什么这样做?我不是继承dataSource
The object that acts as the data source of the receiving table view.
@property(nonatomic, assign) id<UITableViewDataSource> dataSource
Discussion
The data source must adopt the UITableViewDataSource protocol. The data source is not retained.
delegate
The object that acts as the delegate of the receiving table view.
@property(nonatomic, assign) id<UITableViewDelegate> delegate
Discussion
The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained.
我知道这个协议,这只是一个UITableViewController
子类。
编辑:显然IB如果在那里设置了它就不会给你任何警告,但它在代码上按预期执行。我相信IB也应该给你警告,但我猜不是。
答案 0 :(得分:2)
只要实现UITableViewDelegate和UITableViewDataSource所标记的方法(UITableViewDelegate为无,UITableViewDataSource为2),那么你就可以了。 tableView将使用respondsToSelector检查可选方法。您是否在界面构建器中进行连接?如果你在代码中执行它应该有一点警告说你的类不符合UITableViewDataSource和UITableViewDelegate,但是如果你的对象在运行时响应所需的消息,它会在一天结束时工作。
答案 1 :(得分:1)
正在发生的事情是表视图正在向指定的对象发送数据源和委托消息,希望指定的对象符合(未声明的)协议。
添加UITableViewDataSource&amp; UITableViewDelegate到您的接口.h文件为您提供类型检查和一致性(即如果您没有实现“必需”方法的警告等)。
对于我刚才总结的内容,可能有更多官方说明。
b.t.w。,你的问题是这个问题的骗局
UITableView without <UITableViewDelegate, UITableViewDataSource> still works!