理解Objective-c中的方法

时间:2009-08-25 11:39:37

标签: iphone objective-c methods

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 16;
}

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

4 个答案:

答案 0 :(得分:11)

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

- (void) setUpMyJunkMan
{
    myTableView.dataSource = self;
}

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

您的对象需要实现UITableViewDataSource协议(但是,如果您通过InterfaceBuilder连接数据源,则可能没有投诉,如果您不这样做 - 它更多的是编译时验证而不是运行时一个。)

如果您查看UITableViewDataSource的声明,您会发现许多方法都是@optional。其余的是@required;你必须实施它们才能履行协议的合同。

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

答案 1 :(得分:1)

一种简单的方法,可以了解调用方法的原因 - 设置断点,在调试模式下运行,然后查看堆栈跟踪。

对于这种特殊情况 - 框架在呈现表视图时会自动调用它。

我认为你真的需要看一下The Table View Programming Guide,这样你就可以很好地理解在使用表格视图时需要覆盖(而不是覆盖)的方法。如果你正在扩展TableViewController类,框架会做很多繁重的工作,你几乎不需要编写任何代码。

答案 2 :(得分:-1)

表视图正在调用

numberOfSectionsInTableView:

您实施numberOfSectionsInTableView:作为UITableViewDataSource协议的一部分。每个UITableView都会获得dataSource。通常,UITableView将由UITableViewController构建,dataSource将自己设置为视图的numberOfSectionsInTableView:

显示视图后,它会在dataSource上调用{{1}}。

Table View Programming Guide for iPhone OS中解释了这一点。

答案 3 :(得分:-4)

这是代理接口的一部分。

在应用程序的某个时刻(可能在您的UIBuilder中),您已指定包含该方法的对象实际上是委托对象。这意味着当你想调整行为时(在这种情况下是UITableView),你可以在不实际扩展UITableView的情况下,但可以大量改变委托方法。

基本上UITableView类看起来像这样。

- (void) AMethodinUiTableView 
{

int colums =[self.delegate numberOfSectionsInTableView:self];
}

了解更多信息,我会查看delgate编程和选择器。