3

在我的应用程序中,我有一个包含两个场景的故事板。第一个是Summary-View-Controller,只显示一些数据。但是您可以点击它并切换到可以进行更改的 Edit-View-Controller 场景。要将更改报告回 Summary-View-Controller,Edit-View-Controller 将获得对其父级的引用。编辑完成后,他将在其父视图控制器中调用一个方法。

Edit-View-Controller 中的属性如下所示:

@property (weak, nonatomic) id <NameEditViewChangedProtocol> parentController;

我的应用程序运行良好。那不是我的问题。但是在许多教程中,我读到了这样一个属性,它被称为delegate

@property (weak, nonatomic) id <NameEditViewChangedProtocol> delegate;

我知道什么是委托以及它是如何工作的,但对我来说parentController是一个更有意义的名字。代表,那可以是任何东西。所以我的问题是:我什么时候应该调用像这个委托这样的属性?有什么规则如何使用这个名字吗?

4

3 回答 3

3

通常类型属性的名称id<some protocol>与协议名称的最后部分相同,例如 UITableView 的“delegate”属性是 type 的属性id<UITableViewDelegate>,而“dataSource”属性是 type 的属性id<UITableViewDataSource>。如果您根据协议的用途来命名协议,那么类型属性的名称id<some protocol>应该自然地来自协议名称。值得一提的是,协议名称通常不包含“协议”一词。

如果您遵循我解释的协议/属性名称对应关系,Andrew 关于如何命名属性的回答也可以帮助您为协议取一个更好的名称。

编辑:修复格式丢弃<protocol names>

于 2013-03-06T21:32:47.783 回答
3

我知道什么是委托以及它是如何工作的,但对我来说 parentController 是一个更有意义的名字。代表,那可以是任何东西。

我想你已经在这里回答了你自己的问题。就委托类而言,委托是一个“可以是任何东西”的辅助对象。parentController这个名字假定了两个对象之间的特定关系。如果您知道这种关系将永远存在,那么使用该名称是合适的。另一方面,如果两个对象碰巧有这种关系,但这种关系对于一个对象使用另一个对象作为助手这一事实并不重要,那么使用委托(或类似的东西)。

那么,所讨论的对象是否有必要具有父/子关系?parentViewController您是否因为它是父母而专门向其发送消息?或者是否可以想象其他一些对象可以响应相同的消息?

于 2013-03-06T21:50:20.207 回答
2

当它将用于在运行时决定编辑视图控制器的行为方式,或者通知事件、传入数据等时,将其称为委托。如果要在多个编辑视图控制器中重用,则将其称为委托上下文,并且委托的类可以是任何东西(可能符合委托协议)。

如果您知道两者之间的关系始终是父子关系,父子“拥有”子代,而不是更抽象的委托关系,则将其称为 parentController 可能是有意义的。

于 2013-03-06T21:27:45.797 回答