2013-02-19 36 views
2

我正在阅读Stephen G. Kochan的“Objective C中的编程”,并在第11章中介绍了一些有关类别,协议,授权和非正式协议的内容。现在了解协议和代表之间的关系

,他只是讨论了一些关于他们的每个人,它让我更糊涂了......我知道,代表团中的obj c中的最重要的课题之一,它与协议一起去。

请帮忙,这对我很重要,所以我不会搞砸了。 TNX

+1

这个问题不适合SO,很可能很快就会关闭。但是,我建议你研究一下你不了解的其他来源的领域,因为它们对于正确理解现有的类并在自己的代码中创建最好的类非常重要。 – lnafziger 2013-02-19 22:38:04

+0

这是一个偏离主题,但答案是“尽可能早”:假设你想用它来编程一个iOS或OS X,你想要立即了解代表,至少在表面上是很肤浅的。当你准备好时你可​​以更深入,但是早点开始是个好主意。 – dasblinkenlight 2013-02-19 22:38:19

+0

你碰巧知道Java吗? obj-c中的协议有点类似于Java中的接口。在这两种语言中都没有多重继承。一个协议描述了一个类提供但是没有继承的一组方法。所以第二类可以知道某些方法是否可用。代表团只是使用某些回调函数的协议。所以如果一个控制器创建一个表,表想知道从哪里获取数据。控制器然后是或命名一个委托,它提供了将数据提供给表的方法。基本上就是这样。 – 2013-02-19 22:40:46

回答

4

我会试着解释代表团您。当你知道的时候真的很简单,但是你需要时间才能把握住它!

假设您有两个类,一个执行计算的Calculator类和一个用于向用户呈现计算结果的CalculatorScreen类。 Calculator类应该告诉CalculatorScreen何时完成了计算,以便后者可以更新UI。

A 协议提供了一种方法来定义一组与特定名称有某种关联的方法。你可以有一些中的计算器类称为CalculatorDelegate协议定义方法,但实现在别处定义的方法。

定义协议(在这种情况下,计算器)的类可以告诉委托(一个对象,该符合到协议 - 在这种情况下CalculatorScreen)以实现该方法。计算器类可能会完成一个加法计算并告诉它的委托(屏幕)进行更新。你找到我了吗?

对不起,因为我在写我意识到这是很难解释,并与每一个试图笔者同情!

iOS示例: 当您设置了iPad的显示屏上的表,您使用的UITableView类。但是这个班级不知道表格的标题是什么,或者有多少章节和行,或者填写什么内容。因此,它通过定义名为UITableViewDataSource和UITableViewDelegate的协议将责任委托给您。当UITableView需要知道某些信息(例如行数)时,它会在委托(您自己的类)上调用适当的方法,委托类包含协议中定义的那些方法的实现。

在回答你的问题,我就把你的书了一下,开始编码你在一个虚拟的应用到目前为止学到的知识!最好的学习方法是(至少对我来说)。

+0

真棒回答亚当谢谢!我正在练习,每章后都有大约10次练习。但本章末尾的唯一练习就是分类.. @ AdamWaite – MNY 2013-02-19 23:27:49