理解Objective-c中的方法

3 iphone methods objective-c

例如,我们在tableview中使用此方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 16;
}
Run Code Online (Sandbox Code Playgroud)

我想知道我们不会在任何地方调用此方法,但应用程序读取此值是怎么回事?有很多这样的方法,我们没有打电话.

bbu*_*bum 11

您的对象已被设置为某处UITableView的数据源.最有可能的是,通过在InterfaceBuilder中建立连接,尽管通过设置dataSourceUITableView 的属性可以直接在代码中这样做:

- (void) setUpMyJunkMan
{
    myTableView.dataSource = self;
}
Run Code Online (Sandbox Code Playgroud)

将对象设置为数据源后,表视图将根据需要调用方法,以确定需要绘制的内容或响应事件的方式.

你的目标需要实现的UITableViewDataSource协议(不过,如果你连接通过InterfaceBuilder的数据源,有可能不是一个投诉,如果你不这样做-这是一个比一个运行时更编译时验证).

如果你看一下声明UITableViewDataSource,你会发现有很多方法@optional.其余的是@required; 你必须实现它们来履行协议的合同.

这是数据源和代理之间的关键区别.代理可以选择实现任何声明的方法.数据源在两个对象之间创建更加正式的关系,其中必须实现一些方法.