关于代表议定书的混淆

时间:2015-05-16 04:51:00

标签: ios objective-c delegates protocols

对于代表方面的协议,我有一些关于iOS开发的重要问题。所以当我们说对象A符合某个对象B时,我们说A将为对象B的所需方法提供实现,对吗?那讲得通。什么是没有意义的是我们有时使用的对象B的其他一些方法。例如,让我们使用NSURLConnectionDelegate。 NSURLConnectionDelegate允许我们使用的方法之一如下:

[NSURLConnection connectionWithRequest:request delegate:self];

但我们从未提供过上述方法的实现。那么上面的方法是协议的一部分是什么?或者是其他东西?哪些方法属于对象协议的一部分而不是我们可以简单使用的对象的方法,就像我上面提到的那样。下面我们实际要实现的那个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {...}

以上是协议的一部分吗?我在这里迷路了。我试图获得正确的理解。任何帮助/见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

小心你的记谱法。类可以通过实现协议所需的方法以及零个或多个可选方法来符合协议。

您实施委托协议的类由您决定。但是要说" NSURLConnectionDelegate允许我们使用的方法之一是... connectionWithRequest ..."令人困惑。该方法是一种类方法,它是一种方便:它允许您绕过显式创建NSURLConnection对象。我不确定你为什么认为它与委托协议有任何关系。它所做的就是要求您提供任何实现协议的对象,它将用于向您报告进度。

我希望这会对你有所帮助。

答案 1 :(得分:0)

[NSURLConnection connectionWithRequest:request delegate:self];

这是一个类方法,它将delegate作为参数。类方法与任何其他方法类似,由NSURLConnection实现。这意味着无论您为delegate参数添加哪个类,该类还必须符合NSURLConnectionDelegate协议。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {...}

这是UITableViewDataSource协议中的方法。实现UITableViewDataSource协议的任何内容都必须实现此方法,因为它是必需的。