繁体   English   中英

作为自己的委托的类是否遵循iOS约定?

[英]Does a class being its own delegate follow iOS convention?

对不起,这个问题可能听起来“主观”,但我认为应该有一个非常确定的答案。 我有一个“LocationManager”类,我想管理我的核心位置逻辑。 我有两个选择:

  1. LocationManager具有引用CLLocationManager实例的强属性。 LocationManager是CLLocationManager的委托,并从中接收位置更新。

  2. LocationManager是CLLocationManager的子类,并且表示self.delegate = self,以便它可以接收自己的位置更新。

我很好奇这些选项中的哪一个被认为是“正确”的事情,我敢肯定必须有一个首选方式。 谢谢!

子类CLLocationManager并设置其委托自我不应该做的,因为它打破了合同CLLocationManager 由于该类目前已定义,因此它具有delegate属性。 此属性用作合同,声明您可以将此属性设置为其他对象,并且此对象将接收委托通知。 如果你继承CLLocationManager (姑且称之为MyLocationManager ),如果物体的点到自身的委托财产,那么你很可能会造成这样一种情况MyLocationManager的承诺,如果用户使用只能delegate财产为自己的目的。 从用户的角度来看, MyLocationManager是一个没有可用delegate属性的CLLocationManager 这违反了Liskovs替代原则 ,顺便说一下 这里要问的问题是:如果某个ViewController类决定使用它并让其delegate属性指向自身( ViewController ), MyLocationManager仍然可以工作?

此外,如果你说self.delegate = self ,它就不再是“委托”了。 所以我想说最好使用变体1。

谢谢你的提问。

是的,你可以毫无问题地做到这一点。 我有一个UITextField的子类,它是自己的委托。

第一个选项对我来说似乎是正确的,因为它对CLLocationManager (#2)的子类没有多大意义。 你会添加什么功能? 如果你没有添加任何东西为什么子类?

您关心的只是封装有关位置更新的消息。 我会说你在第一种情况下可以接受使用委托/协议模式。

Jef是对的,有时可以将另一个类的子类设置为自己的委托。 虽然您需要注意该对象如何响应某些消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM