我正在努力理解Objective-C接口、代理和协议。
我的问题是:
代理必须在一个单独的文件中吗?还是可以在你的类中定义方法作为代理?
协议是否像Java中的接口?目前我理解的是,如果你使用这个协议,它基本上会让你实现一些方法。
我仍然对接口感到困惑。我很确定它们与Java中的接口没有任何相似之处。也许它只是声明将在类中实现的变量。
我正在努力理解Objective-C接口、代理和协议。
我的问题是:
代理必须在一个单独的文件中吗?还是可以在你的类中定义方法作为代理?
协议是否像Java中的接口?目前我理解的是,如果你使用这个协议,它基本上会让你实现一些方法。
我仍然对接口感到困惑。我很确定它们与Java中的接口没有任何相似之处。也许它只是声明将在类中实现的变量。
需要定义一个委托协议,如下所示
@protocol
//methods
@end
它可以放在任何.h类中,只需在使用前导入即可。
协议不像Java接口,协议是一种适配器,允许两个类一起工作。基本上,它表示,如果您希望A类向您发送有关其状态和操作的消息,则必须实现其委托将调用的方法。它不像接口,因为接口说如果您想派生此类,则必须实现这些方法,而协议则表示如果您想与此类交互,则必须实现这些方法,因此有所不同。
代理的作用是在另一个对象执行某些操作时通知它。例如,您的一个对象想知道一个窗口正在关闭,因此您将其注册为窗口的代理并实现windowWillClose:
方法。这个方法会被NSWindow
适当地调用。因此,代理方法通常定义在另一个类中。在某种程度上,它可以让您扩展一个类的功能而不必对它进行子类化。
(编辑:请参见Daniel的关于协议的回答)
@interface
是类声明,其中列出了成员变量和方法。它位于.h
文件中,如果需要使用该类,则需要导入该文件。方法的代码位于@implementation
中的.m
文件中。在Java中,情况有所不同,.java
文件同时承担这两个目的。