在我的应用程序中,我有一个有两个场景的故事板。第一个是Summary-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 是一个更有意义的名字。 委托,这可能就是什么。所以我的问题是:我什么时候应该像这个代表一样打电话?有没有规则如何使用这个名字?
答案 0 :(得分:3)
通常,类型id<some protocol>
的属性名称与协议名称的最后一部分相同,例如代表&#39; UITableView的属性是id<UITableViewDelegate>
类型的属性,&#39; dataSource&#39;属性类型为id<UITableViewDataSource>
。如果按照其用途命名协议,则类型id<some protocol>
的属性名称应该来自协议名称。对于它的价值,协议名称通常不包括“协议”一词。
安德鲁关于如何命名该属性的答案可以帮助您为协议创建更好的名称,如果您遵循我解释的协议/属性名称对应关系。
修改:修复格式丢弃<protocol names>
答案 1 :(得分:3)
我知道代表团是什么以及它是如何工作的,但对我来说是parentController 是一个更有意义的名字。代表,那可能就是什么。
我想你在这里已经回答了你自己的问题。 委托是一个帮助对象,就委托类而言,“可能只是任何东西”。名称 parentController 假设某些特定于两个对象之间的关系。如果您知道该关系将始终存在,那么使用该名称是合适的。另一方面,如果两个对象恰好只有这种关系,但这种关系对于一个对象使用另一个对象作为帮助的事实并不重要,那么使用 delegate (或者某些东西)相似)。
那么,有问题的对象是否必须有父/子关系?您是否专门向parentViewController
发送消息,因为它是父母?或者可以想象其他一些对象可以响应相同的消息?
答案 2 :(得分:2)
当它被用于在运行时决定编辑视图控制器应该如何表现,或者被通知事件,传入数据等时,将其称为委托。如果要编辑视图控制器,则将其称为委托在多个上下文中重用,委托的类可以是任何东西(可能符合委托协议)。
如果您知道两者之间的关系总是与父母拥有父母与子女的关系,那么将其称为parentController可能是有意义的。孩子,而不是更抽象的代表关系。