2013-03-06 201 views
3

在我的应用程序中,我有一个有两个场景的故事板。第一个是Summary-View-Controller,只显示一些数据。但是你可以点击它并切换到编辑视图控制器场景,在其中进行更改。要将更改报告回总结视图控制器,编辑视图控制器将获得对其父项的引用。编辑完成后,他将在其父视图控制器中调用一个方法。何时调用引用属性“委托”?

在编辑 - 视图 - 控制器属性看起来像这样:

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

我的应用程序工作正常。那不是我的问题。但在很多教程中,我读到这样的属性只是叫做代表

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

我知道什么是委托和它是如何工作的,但对我parentController是一个更有意义的名称。 代表,这可能就是任何事情。所以我的问题是:什么时候应该调用像这样的代理的财产?是否有任何规则如何使用这个名字?

回答

3

我知道什么是委托和它的工作原理,但对我parentController 是一个更有意义的名称。代表,这可能就是任何事情。

我想你已经在这里回答你自己的问题。 A代表代表是一个帮助对象,就委托类而言,它可以是“任何东西”。名称parentController假设了两个对象之间关系的具体内容。如果你知道这种关系永远存在,那么使用这个名字是合适的。在另一方面,如果两个对象只会发生在有关系,但关系不是这样的事实,一个物体作为辅助使用其他重要的,然后使用委托(或类似的东西)。

那么,有问题的对象是否有父/子关系?您是否将消息发送至parentViewController,因为它是家长?或者可以想象,某些其他物体可能会响应相同的消息?

2

调用它时,它会被用来制造有关编辑视图控制器应该如何表现在运行时的决策,或者是通知事件,输入数据等的呼叫其委派如果编辑视图控制器是委托可以在多个上下文中重用,并且委托的类可以是任何东西(可能符合委托协议)。

如果您知道两者之间的关系总是与父'拥有'孩子成为父子关系,而不是更抽象的委托关系,那么将其称为parentController可能是有意义的。 id<some protocol>类型的属性的

3

一般名称是相同的协议名称的最后部分,例如一个UITableView的“委托”属性是id<UITableViewDelegate>类型的属性,而“数据源”属性是id<UITableViewDataSource>类型。如果您按照其用途命名协议,那么id<some protocol>类型的属性的名称应自然来自协议名称。对于它的价值,协议名称通常不包含“协议”一词。

安德鲁的有关如何命名属性可以帮助你的协议做出一个更好的名字为好,如果按照协议/属性名称对应,我解释的答案。

编辑:固定格式扔掉<protocol names>

+0

+1。所以,你可以调用parentController协议“EditViewControllerParent”,或者,如果它更有意义,它是一个委托,“EditViewControllerDelegate”。 – 2013-03-06 21:39:10

+0

如果你使用NavigationControllers(self.navController)遵循苹果的风格,它应该可能是'self.parentController'或更特定于你的应用程序的领域 – 2013-03-06 21:52:55