Objective c 了解协议和代理之间的关系

Objective c 了解协议和代理之间的关系,objective-c,cocoa-touch,Objective C,Cocoa Touch,我正在阅读Stephen G.Kochan的《目标C中的编程》,在第11章中,他混合了一些内容:类别、协议、委托、非正式协议 现在,他只是谈论了一下他们中的每一个人,这让我更加困惑……我知道授权是obj c中最重要的主题之一,它与协议一起进行 请帮忙,这对我很重要,所以我不会把事情搞砸的。 tnx我会尽力为你们解释授权。当你确实知道的时候,这真的很简单,但是你需要时间去了解它 假设您有两个类,一个是执行计算的计算器类,另一个是用于向用户显示计算结果的计算器屏幕类。计算器类应该在完成计算后告诉计算

我正在阅读Stephen G.Kochan的《目标C中的编程》,在第11章中,他混合了一些内容:类别、协议、委托、非正式协议

现在,他只是谈论了一下他们中的每一个人,这让我更加困惑……我知道授权是obj c中最重要的主题之一,它与协议一起进行

请帮忙,这对我很重要,所以我不会把事情搞砸的。
tnx

我会尽力为你们解释授权。当你确实知道的时候,这真的很简单,但是你需要时间去了解它

假设您有两个类,一个是执行计算的
计算器
类,另一个是用于向用户显示计算结果的
计算器屏幕
类。计算器类应该在完成计算后告诉计算器屏幕,以便后者可以更新UI

协议提供了一种定义一组方法的方法,这些方法以某种方式与指定的名称相关。在Calculator类中,可以在名为CalculatorDeleteGate的协议中定义许多方法,但方法实现是在其他地方定义的

定义协议的类(在本例中为计算器)可以告诉委托(一个符合协议的对象-在本例中为计算器屏幕)来实现该方法。calculator类可能会完成加法计算,并通知其委托人(屏幕)进行更新。你明白了吗

对不起,在我写作的过程中,我意识到很难解释和同情每一位尝试过的作者

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


作为对你问题的回答,我会放下这本书,开始在一个虚拟应用程序中编写你迄今为止学到的东西!学习的最好方法是去做(至少对我来说)。

我会试着为你解释授权。当你确实知道的时候,这真的很简单,但是你需要时间去了解它

假设您有两个类,一个是执行计算的
计算器
类,另一个是用于向用户显示计算结果的
计算器屏幕
类。计算器类应该在完成计算后告诉计算器屏幕,以便后者可以更新UI

协议提供了一种定义一组方法的方法,这些方法以某种方式与指定的名称相关。在Calculator类中,可以在名为CalculatorDeleteGate的协议中定义许多方法,但方法实现是在其他地方定义的

定义协议的类(在本例中为计算器)可以告诉委托(一个符合协议的对象-在本例中为计算器屏幕)来实现该方法。calculator类可能会完成加法计算,并通知其委托人(屏幕)进行更新。你明白了吗

对不起,在我写作的过程中,我意识到很难解释和同情每一位尝试过的作者

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


作为对你问题的回答,我会放下这本书,开始在一个虚拟应用程序中编写你迄今为止学到的东西!最好的学习方法是去做(至少对我来说)。

这个问题不太适合SO,可能很快就会结束。但是,我建议您在其他来源中研究您不确定的领域,因为它们对于正确理解现有类和在您自己的代码中创建最佳类至关重要。这是一个离题的话题,但答案是“尽早”:假设您想用它编写iOS或OSX,您希望立即了解代理,至少在非常肤浅的层面上。当你准备好的时候,你可以更深入,但是早点开始是个好主意。你知道Java吗?obj-c中的协议类似于Java中的接口。在这两种语言中都没有多重继承。协议描述了类提供但未继承的一组方法。因此,第二个类可以知道某一组方法是否可用。委派只是使用协议来实现某种回调函数。因此,如果控制器创建了一个表,该表希望知道从何处获取数据。然后,控制器是或命名一个委托,该委托提供将数据馈送到表中的方法。基本上就是这样。代表绝对没有什么“特别”的。它们和其他对象一样只是类/协议。如果你坚持以不同的方式看待它们,那么它们的使用方式(有一点)就不同了。请看一看问题结束时显示的消息中链接到的常见问题解答。基本上,你问的问题是主观的,没有“正确”答案