gpt4 book ai didi

objective-c - DataSource 模式与在配置对象时设置属性

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:25 24 4
gpt4 key购买 nike

我经常对何时使用数据源模式以及何时使用属性来为对象提供配置信息感到困惑。

我有两种方法可以做到这一点,

通常我会在对象的类中保留很多必须配置的属性,以及一个重置对象并继续使用新属性的方法。

对于配置另一个对象的对象,我保留了一个名为 configureXYZ:WithValues: 的方法,它重置属性并调用要配置的对象的重置方法。

这是我在 MPMoviePlayerController 中看到的,我们必须设置属性。

其他方式是 tableView 的工作方式,所有配置信息都来自数据源方法。

谁能更清楚地说明在哪种情况下首选哪种方式。

因为我常常想使用设计模式并使代码看起来很时尚,但我想知道我们什么时候真正需要这些。我非常清楚委托(delegate)模式并且必须定期使用它。DataSource 是我一直不清楚的一件事。

最佳答案

在设计类时,在决定是使用委托(delegate)还是使用属性时,您应该考虑的关键因素是值更改的频率。如果您只设置一次值并且它们永远不会再更改,那么属性的效果最好。如果值可能随时间变化或因条件而变化,委托(delegate)(其中数据源只是一个示例)的效果最好。

例如,在UITableView 中,行数是高度动态的。它可能由于表格 View 控制之外的许多原因而改变。行甚至代表的是高度动态的。它们可能是数据;它们可能是菜单选项;他们可能是游戏中的棋子。 UITableView 不会尝试猜测或控制其中的任何一个。它将它移动到一个委托(delegate)(数据源),在那里可能会做出非常复杂的决定。

MPMoviePlayerController 有一些控件,这些控件意味着非常具体的事情并且几乎永远不会改变(特别是一旦电影开始播放)。基本上你设置好东西,点击 play 然后走开。在那种情况下,代表可能会矫枉过正。

中间有很多情况,无论哪种方式都可能没问题。我会鼓励开发人员首先考虑委托(delegate),如果没有意义,然后再考虑属性。这并不是因为委派总是正确的答案,而是因为大多数受过 C++ 或 Java 教育的开发人员并不从委派的角度思考问题,因此应该有意识地这样做。

沿着这些思路的一些其他想法:

  • 使用属性时,理想的情况是它们在初始化时配置并且此后不可变。这解决了大量问题。

  • 如果您发现自己需要很多属性,委派可能更好,而且通常更简单。

  • 委托(delegate)通知方法 (somethingDidHappen:) 通常最好作为 block 来实现。 ( block 在 ObjC 中相对较新。许多基于委托(delegate)的 Apple 界面正在转向 block ,但由于历史原因,您会看到真正的混合。)

  • “委托(delegate)”和“数据源”之间的区别在于,委托(delegate)管理行为,而数据源提供数据。它们通常以相同的方式实现。

关于objective-c - DataSource 模式与在配置对象时设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com