xCode/Objective-C解剖类比-帮助Noob获得它

xCode/Objective-C解剖类比-帮助Noob获得它,objective-c,xcode,oop,delegates,Objective C,Xcode,Oop,Delegates,好的,我试着开始使用Xcode,我在OOP方面有一些经验,但大部分时间我都习惯于编写脚本。总之,我正在尝试处理objective C和xcode中的一些概念,但我在将所有内容组合起来时遇到了一些问题 首先,我很难理解代理和协议的作用。我认为,如果有人能用一个简单的比喻来解释这一点,比如邮递员、教师、工厂或其他什么,那将是非常有用的。我不理解委托中的方法和常规类方法之间的区别 假设我有一个班邮递员。现在postman有了sortMail()和deleteMail()方法。委托方法的示例是什么。如果

好的,我试着开始使用Xcode,我在OOP方面有一些经验,但大部分时间我都习惯于编写脚本。总之,我正在尝试处理objective C和xcode中的一些概念,但我在将所有内容组合起来时遇到了一些问题

首先,我很难理解代理和协议的作用。我认为,如果有人能用一个简单的比喻来解释这一点,比如邮递员、教师、工厂或其他什么,那将是非常有用的。我不理解委托中的方法和常规类方法之间的区别

假设我有一个班邮递员。现在postman有了sortMail()和deleteMail()方法。委托方法的示例是什么。如果使用了委托,返回的数据在哪里?在代理内部?我必须实例化委托,然后从中读取结果,还是委托将结果返回给调用对象?协议从何而来


请举几个简单的例子:)小步骤。

协议和代表经常一起讨论。它有助于理解协议首先是什么

协议

协议是实现标准方法集的类承诺的一种方式

示例:认证电工具有所有认证电工都具备的特定技能。如果你需要有人做认证电工认证的事情,那么任何认证电工都应该能够做到(至少在理论上)

代表

现在,委托是一个被赋予了满足特定需求的责任的对象。一个对象可以被赋予满足另一个对象需求的责任

示例:在建造房屋时,房屋需要铺设电线等。这一责任已交给认证电工,我们知道他可以这样做,因为他已获得认证(即实施特定协议)

将所有内容放在一个可可上下文中:

UITableView
需要提供单元格,以便显示它们。要提供单元格,需要创建(或至少指定)一个类来实现
UITableViewDataSource
协议。这保证了类执行所需的操作,为
UITableView
提供所需的单元格

因此,
UITableView
将提供单元格的责任委托给某个类对象,该类对象实现了确保该对象知道如何提供所需单元格的协议


委托是处理另一个对象的特定功能的对象,如“对象A将特定功能委托给对象B”

例如,您可以使用Apple类的实例
NSURLConnection
请求web服务,但Apple的代码显然不知道如何处理下载的数据,因此您提供了一个委托对象来处理该功能
NSURLConnection
然后,当对象需要处理其下载的数据时,通过向其传递消息,将该功能委托给对象

另一个例子是表视图。苹果已经编写了很多代码来显示表视图并处理与它们的交互,但它不知道您想要显示什么数据,也不知道当有人与这些数据交互时需要对这些数据做什么。因此,您可以为这些对象提供委托对象。当表视图需要知道要显示哪些数据时,它会要求您的代理为其获取数据。当用户选择一个项目时,它会要求您的代理处理该项目


协议只是描述代理应该理解哪些消息的一种方式。可以有非正式协议,文档中刚刚描述过,也可以有正式协议,它们在头文件中定义。

到目前为止,您阅读了关于该主题的哪些文献?我有一本ios5应用程序开发书籍。我想我也应该买一本介绍xcode的书。委托和协议与xcode无关,但与Objective C有关。太完美了!我需要一个真实世界的例子。现在我只想知道如何应用它!谢谢这里的例子:实际上,实现协议的类并不保证实现方法,特别是当它们被指定为
@optional
时。这是真的,但是,我试图以一种不易混淆的方式解释它。技术细节常常混淆解释。我认为协议是一种承诺(当然除了@optional)而不是保证。只有接口可用(除非您拥有该类),因此您无法判断该类是否实现了该协议。